java与模式2:工厂方法模式

设计模式2:工厂方法模式

工厂方法模式:意图是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

涉及到的角色:

抽工厂角色(creator):工厂模式的核心。与应用程序无关。任何在模式中创建对象的工厂类必须实现这个接口。这个角色在实际系统中也常常用抽象类实现。

具体工厂(concrete creator):实现抽象工厂接口的java类。含有与应用紧密相关的商业逻辑。工厂类在应用程序的直接调用下创建产品对象,往往由一个具体java类实现

抽象产品(product):是由工厂方法模式所创建的产品对象的父类或他们共同拥有的接口。抽象产品角色可以用一个java接口或java抽象类实现。

具体产品角色(concrete product):工厂方法模式所创建的任何对象都是这个角色的实例。具体产品角色由一个具体的java类实现。

常见的结构图如下:

工厂方法模式的一个实例类图

 

感觉工厂方法模式是将简单工厂模式中的工厂类中的方法给分别写到单独的类中了(即演变为具体的实现类。这样写是比较好的,因为这样做在系统增加新的产品的时候是不用改变工厂类的,这样就不会对原有系统有影响了)。

两者的区别:工厂方法模式的核心是在抽象工厂类,而简单工厂模式的核心是具体的类上。在只有一个具体产品的情况下,把工厂方法模式的抽象类合并到具体实现类中也就变成简单工厂模式了。工厂方法中可以有很多的具体工厂的实现,是进一步对简单工厂模式的拓展。

Jdk源码中工长方法模式的应用还是比较多的,最常见的如Iterator接口,如图:

 

collection接口使用工厂方法模式的类图
collection接口使用工厂方法模式的类图

还有Url,UrlConnection。

 

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

张贴在未分类

发表回复

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