[DP] Factory Pattern
介绍
准备做一起设计模型的介绍,主要的参考是一本书:Design Patterns Elements of Reusable Object-Oriented Software 作者是4位大侠,Erich,Richard,Ralph,John,也叫四人帮, GoF(Gang of Four)
Coding to interfaces, not implementation
目的
当要处理具有关联性的不同东西(动物,形状,颜色等)的时候,必要的准备工作有以下3点;
- 给每一样东西定义一个class。
- 给每一个东西的class都注入处理的具体方法。
- 给整体处理的逻辑写一个method或者class
Factory Pattern的目的就是如何有效的组织这些class文件,以便应对将来可能的扩展,比如添加处理方法,添加更多类型。
具体的例子
写一个画板程序,这个程序可以画圆形,长方形,三角形, 准备工作:
- 给圆形,长方形,三角形各写一个class。
- 不同形状画法不一样,每个class注入画的方法。
- 写一个画版Canvas的class,分别给给圆形,长方形,三角形创建一个对象,然后使用这三个工具画画吧。
Factory 方案
分析
-
Canvas的逻辑已经足够复杂了,不同形状画法的逻辑被完全的抽离,这样可以让Canvas这个class更加关注它自己的工作,代码管理更加有效。比如需要画圆的时候,调用shapeFactory.getShape(‘circle’).draw()即可。
-
添加新的形状(五角星),需要写一个新的五角星的class,然后在ShapeFactory里面注册这个class。
-
便于扩展,方便管理,画图软件里的画笔类型可以有成百上千种,添加新的类型可以基本不更改Canvas的代码。
-
Factory的扩展Abstract Factory Pattern
沿袭Factory Pattern的思路,形状有shapeFactory,颜色有ColorFactory,画笔有penFactory等等,这么多Factory本身也是同类型的东西,但是因为Factory的功能是不同的,用继承的思路并没有什么优势,所以一般的处理方法是通过添加一个抽象的class,其他的思路不变。
abstract class factory abstract Shape getShape; abstract Color getColor; abstract Pen getPen;