首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

HeadFirst(4)Factory 工厂设计模式

2013-12-16 
HeadFirst(四)Factory 工厂设计模式????简单工厂与工厂方法的区别:?简单工厂,是一个被PizzaStore使用的对

HeadFirst(四)Factory 工厂设计模式

?

?


?

?

简单工厂与工厂方法的区别:

?

简单工厂,是一个被PizzaStore使用的对象,简单工厂作为外部一个类被组合到PizzaStore中;

简单工厂,把全部的事情在一个地方都处理完了。

?

工厂方法,有一个抽象方法createPizza(),由PizzaStore的子类自行负责createPizza()的行为;

工厂方法,创建了一个框架(框架依赖工厂方法创建具体类),让子类决定要如何实现。

?

设计原则

依赖抽象,不要依赖具体类

不能让高层组件依赖于底层组件,而且,不管高层或底层组件,两者都应该依赖于抽象

简单点说,就是要面向抽象编程

?

变量不可以持有具体类的引用

如果使用new,就会持有具体类的引用。

你可以改用工厂来避开这样的做法。

不要让类派生自具体类

如果派生自具体类,你就依赖具体类。

请派生自一个抽象(接口或抽象类)。

不要覆盖基类中已经实现的方法

如果覆盖基类已经实现的方法,那么你的基类就不是一个真正适合被继承的抽象。

基类中已实现的方法,应该由所有子类共享。

?

尽量达到上述要求,而不是随时都要遵守,根据实际情况考量!

?

?

Pizza 抽象类

?

?

?

?

具体的Pizza-NYStyleCheesePizza

?


?


HeadFirst(4)Factory 工厂设计模式
?

?

?

工厂方法与抽象工厂的比较

?

工厂方法:

通过继承父类,实现父类的抽象方法并返回具体的对象

如,NYPizzaStore继承PizzaStore,通过实现createPizza()返回NYStyleCheesePizza

?

抽象工厂:

通过对象间的组合,通过被组合的对象去调用子类的方法,完成所需对象的创建

如,NYStyleCheesePizza中,通过与PizzaIngredientFactory进行组合,在覆盖父类的抽象方法prepare()时,调用PizzaIngredientFactory对一组原料对象进行创建

?

可以把一组相关的产品集中起来进行创建;

缺点:如果需要扩展新的产品,就必须改变接口;

?

?

抽象工厂模式应用示例

不同地区的PizzaStore需要使用不同的原料来制作Pizza

?

原料---接口


?

?

?

热点排行