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