Factory Method(工厂方法)–对象创建型模式
一、意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
二、动机
1.在软件系统中,经常面临着创建对象的工作;由于需求的变化, 需要创建的对象的具体类型经常变化。
2.如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧 耦合?
三、适用性
1.当一个类不知道它所必须创建对象的类型的时候。
2.当一个类希望由子类来指定它所创建的对象的时候。
3.当类创建对象的职责委托给多个帮助子类的中的某一个,并且你希望将哪一个帮助子类是代理着这一信息局部变化的时候。
四、结构
五、效果
1.为子类提供挂钩(hook)。
2.连接平行的类层次。
六、实现
1.Creator类是一个抽象并且不提供它所声明的方法的实现;Creator类是一个具体的类而且为工厂方法提供缺省的实现。
2.参数化工厂方法。
3.特定语言的变化和问题。
4.使用模板已避免创建子类。
5.命名约定。
七、要点总结
1.Factory Method模式用于隔离类对象的使用者和具体类型之间的 耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导 致软件的脆弱。
2.Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
3.Factory Method模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。
八、举例说明:
想造一个椅子,具体怎么造等客户来了才决定。主要思想将实现延迟到子类实现。
本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解