第十三章 工厂方法模式( Factory Method)
-
概念
工程方法模式是类的创建模式,又叫做虚拟构造子模式或者多态性工厂模式,实际是就是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 -
一个工厂方法所提供的产品对象不一定每次都是一个新的对象。
-
相比于简单工厂模式,核心的工厂类不再负责所有的产品的创建,而是将具体的创建工作交给子类去做。而自己变成了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类被具体实例化。
1)抽象工厂角色(Creator):是工厂方法的核心,与应用程序无关。但是任何在模式中创建对象的工厂必须实现这个接口。
2)具体工厂角色(Concrete Creator):担任这个角色的是实现了抽象工厂接口的具体Java类。这个角色与应用有密切相关的逻辑。
3)抽象产品角色(Product):产品的超类型,所有产品对象的共同父亲或共同接口。
4)具体产品角色(Concrete Product):实现了抽象产品角色的接口。 -
工厂方法模式时序图
1)客户端创建ConcreteCreator1对象,这是客户端所持有都的静态变量的Creator,而实际类型是ConcreteCreator1,然后客户端调用ConcreteCreator1中的工厂方法factory(),后者又调用ConcreteProduct1的构造子创建出产品对象。 -
工厂方法模式和简单工厂模式
1)结构上的不同。工厂方法模式核心是一个抽象工厂类,而简单工厂模式核心是一个具体类。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式。 -
工厂方法模式与其他模式的关系
1)模板方法模式:
第一,两个模式都基于方法的,工厂方法模式是基于多态性的工厂方法的,而,模板方法模式是基于模板方法和基本方法的;第二,两个模式都将具体工作交给子类,工厂方法模式将创建工作推延给子类,模板方法模式将剩余逻辑交给子类。
从工厂角色组成的工厂等级结构上看,抽象工厂角色中可以加入一个模板方法,代表某个顶级逻辑。而这个模板方法调用几个基本方法,这些基本方法中就可以有一个或者多个工厂方法,这些工厂方法代表剩余逻辑,交给具体的子类实现。
2)亨元模式:亨元模式使用了带有循环逻辑的工厂方法。
3)备忘录模式:亨元模式使用了一个聚集类登记所创建的产品对象,以便可以通过查询这个聚集找到和共享已经创建了的产品对象,这就是备忘录模式的应用。
-
JMS技术架构红的工厂方法模式(JMS-java消息服务)
上面图中,用户端创建了一个新的context对象,以便利用JNDI伺服器寻找Topic和ConnectionFactory对象。在得到这个对象后,就可以利用Conncetion创建Session的实例。有了这个Session的实例后,就可以利用Session创建TopicPublisher的实例,并利用Session创建消息实例。
问题: 1)请问下面这句话对吗?“
一个工厂方法必须返还一个新的对象。如果返还的不是- -个新的对象,就不符合工厂方法模式的描述。”
2)请问工厂方法可不可以返还在另-一个对象里实例化的一个对象?