设计模式1:简单工厂模式
简单工厂模式:是工厂模式和抽象工厂模式的一个基础。是由一个工厂类根据传入的参数决定创建哪一种产品类的实例。
涉及到的角色:
工厂角色(creator):工厂模式的核心。含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建对象,往往由一个具体java类实现。
抽象产品(product):是由工厂方法模式所创建的对象的父类或他们共同拥有的接口。抽象产品角色可以用一个java接口或java抽象类实现。
具体产品角色(concrete product):工厂方法模式所创建的任何对象都是这个角色的实例。具体产品角色由一个具体的java类实现。
常见的结构图如下:

其中工厂类的代码如:
public class Creator {
public Product getProduct(String which) {
if (“1”.equals(which)) {
return new ConcrateProduct1();
}
return new ConcrateProduct();
}
}
模式中常用到接口和抽象类,这两者的具体区别,将在一篇新的文章中进行总结。
在模式中是使用接口还是抽象类的问题很困扰人,在《java与模式》一书中是这样描述的:如果具体产品类彼此之间没有共同的商业逻辑,那么产品角色可以有一个java接口扮演,否则就应该公有的商业逻辑移到抽象类里面。共同的代码在编码时应该上移,以达到共享的目的。
上述类图中只有一个工厂方法,但是实际中可以有多个工厂方法。Java中java.text.DateFormat设计就使用了一种特殊的简单工厂模式。其类图也是比较有趣的,一个抽象类竟然可以产生自身的实例对象(实际上是其子类simpleDateFormat)。

这里使用静态工厂方法是为了将具体子类实例化的工作隐藏起来,从而客户端不必考虑如何将具体子类实例化,因此DateFormat会提供它的合适的具体子类的实例。
将工厂的方法返回类型设置为抽象产品类型的做法,是一种多态的运用,可以叫做针对抽象编程。
设计模式学习列表:Java设计模式学习笔记