zoukankan      html  css  js  c++  java
  • 设计模式---简单工厂模式

    1.简单工厂模式

      简单工厂模式分为三种:

    (1)普通

      就是建立一个工厂类对实现了同一接口的一些类进行实例的创建

    /*发送邮件的例子*/
    //首先,创建二者的共同接口
    public interface Sender{
        public void send();
    }
    
    //创建,实现类
    public class MailSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is mailSender");
        }
    }
    
    public class SmsSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is smsSender");
        }
    }
    //创建工厂类
    public class FactorySender{
        public Sender produce(String type){
            if("mail".equals(type)){
                return new MailSender();
            }else if("sms".equals(type)){
                return new SmsSender();
            }else{
                System.out.println("请输入正确类型");
                return null;
            }
        }
    }
    
    //简单工厂模式测试类
    public class FactoryTest{
        FactorySender factory=new FactorySender();
        Sender sender=factory.produce("sms");
        sender.send();
    }
    
    (2)多个方法

      是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象

    /*发送邮件的例子*/
    //首先,创建二者的共同接口
    public interface Sender{
        public void send();
    }
    
    //创建,实现类
    public class MailSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is mailSender");
        }
    }
    
    public class SmsSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is smsSender");
        }
    }
    //创建工厂类
    public class FactorySender{
        public Sender produceMail(){
            return new MailSender();
        }
        public Sender produceSms(){
            return new SmsSender();
        }
    }
    
    //简单工厂模式测试类
    public class FactoryTest{
        FactorySender factory=new FactorySender();
        Sender sender=factory.produceMail();
        sender.send();
    }
    
    (3)多个静态方法

      将上面多个工厂方法模式里面的方法置为静态的,不需要创建实例,直接调用即可。

    /*发送邮件的例子*/
    //首先,创建二者的共同接口
    public interface Sender{
        public void send();
    }
    
    //创建,实现类
    public class MailSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is mailSender");
        }
    }
    
    public class SmsSender implements Sender{
        @Override
        public void send(){
            System.out.println("this is smsSender");
        }
    }
    //创建工厂类
    public class FactorySender{
        public static Sender produceMail(){
            return new MailSender();
        }
        public static Sender produceSms(){
            return new SmsSender();
        }
    }
    
    //简单工厂模式测试类
    public class FactoryTest{
        Sender sender=FactorySender.produceMail();
        sender.send();
    }
    

      总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上三种模式中,第一种如果输入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选择第三种--静态工厂方法模式。

  • 相关阅读:
    OCP-052考试题库汇总(35)-CUUG内部解答版
    OCP-052考试题库汇总(34)-CUUG内部解答版
    018 ThreadLocal实现线程安全
    017 无锁与CAS
    016 原子类
    015 可见性问题与volatile
    014 锁重入
    013 synchronized的优化
    012 内置锁和synchronized
    011 线程安全性问题
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11146138.html
Copyright © 2011-2022 走看看