【创建型】工厂模式

Posted by Liao on 2023-01-13

一、动机

面向接口编程

实例化时不要写具体的类

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模式解决”单个对象”的需求变化。缺点在于要求创建方法/参数相同。