一、动机
面向接口编程
实例化时不要写具体的类
1 | ISplitter * splitter = new FileSpliter(); // 不推荐:FileSpliter * splitter = new FileSpliter(); |
但C++或者其它语言不支持抽象基类上创建对象,不管在栈上声明对象或在堆上new对象,都不可以
1 | ISplitter sp; // 不可取 |
二、定义
定义一个用于创建对象的接口,让子类决定示例化哪个类。Factory Method使得一个类的实例化得以延迟。(目的:解耦合,即new后面具体类的耦合;手段:C++用虚函数)
三、结构
mainForm依赖稳定的部分(红色框),需要变化的具体类型放到工厂,这是一种扩展策略。
四、总结
Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。
Factory Method模式通过面向对象(多态)的手法,将要所创建的具体对象工作延迟到子类,从而实现一种扩展(非更改)的策略,较好地解决了这种耦合关系。
Factory Method模式解决”单个对象”的需求变化。缺点在于要求创建方法/参数相同。