设计模式——简单工厂模式

1 简单工厂模式的介绍

(1) 首先,简单工厂模式不属于23种设计模式,但通常将它作为学习其他工厂模式的基础。

(2) 简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。

(3) 简单工厂模式(Simple Factory Pattern)定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
    
    因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

(4) 简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
复制代码

2 简单工厂模式的三种方式

(1)	普通的简单工厂

(2)	多方法的简单工厂

(3)	多个静态方法的简单工厂
复制代码

2-1 普通的简单工厂

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

举例如下:(我们举一个发送邮件和短信的例子)

(1) 首先,创建一个接口类:

    public interface Sender {  
        public void Send();  
    }  
    
(2) 其次,创建实现两个类:

    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 sms sender!");  
        }  
    }  
    
(3) 最后,建工厂类:

    public class SendFactory {  
        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;  
            }  
        }  
    } 
        
(4) 测试类如下:

    public class FactoryTest { 
        public static void main(String[] args) {  
            SendFactory factory = new SendFactory();  
            Sender sender = factory.produce("sms");  
            sender.Send();  
        }  
    }  
    
    输出:this is sms sender!
复制代码

2-2 多方法的简单工厂

多方法的简单工厂是对普通工厂方法模式的改进,

在普通工厂方法模式中,如果传递的字符串出错,则不能正确的创建对象,

而多个工厂方法模式是提供多个工厂方法,分别创建对象。

(1) 于是我们对上面2-1-(3)的工厂类进行修改变为

    public class SendFactory {  
       public Sender produceMail(){  
            return new MailSender();  
        }  
          
        public Sender produceSms(){  
            return new SmsSender();  
        }  
    } 
        
(2) 测试类如下:

    public class FactoryTest {  
        public static void main(String[] args) {  
            SendFactory factory = new SendFactory();  
            Sender sender = factory.produceMail();
            sender.Send();  
        }  
    } 
    
    输出:this is mailsender!
复制代码

2-1 多个静态方法的简单工厂

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

(1) 于是我们对上面2-1-(3)的工厂类进行修改变为

    public class SendFactory {  
        public static Sender produceMail(){  
            return new MailSender();  
        }  
          
        public static Sender produceSms(){  
            return new SmsSender();  
        }  
    }  

(2) 测试类如下:

    public class FactoryTest {  
        public static void main(String[] args) {
            Sender sender =SendFactory.produceMail();  
            sender.Send();  
        }  
    }  

    输出:this is mailsender!
复制代码

3 总结

总体来说,工厂模式用于:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

在以上的三种模式中:

    第一种如果传入的字符串有误,不能正确创建对象。
    
    第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种————静态工厂方法模式。

简单工厂模式存在的问题

    简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则。
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享