java与模式阅读1:简单工厂模式

设计模式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类图
dateformat类图

这里使用静态工厂方法是为了将具体子类实例化的工作隐藏起来,从而客户端不必考虑如何将具体子类实例化,因此DateFormat会提供它的合适的具体子类的实例。

将工厂的方法返回类型设置为抽象产品类型的做法,是一种多态的运用,可以叫做针对抽象编程。

 

设计模式学习列表:Java设计模式学习笔记

 

张贴在未分类

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注