解决的问题
假设你要开发一个app,app的界面支持MaterialDesign和Ant两种主题。不同的主题所用的组件是不一样的,例如按钮组件,MaterialDesign主题就是MaterialButton,Ant主题就是AntButton。
一开始可以这样设计:
未使用抽象工厂.png
每个ViewController通过判断当前的theme,实例化对应的组件。这样设计的问题是:
- 如果要添加新的theme,每个ViewController都要修改,改动很大。
- ViewController的代码量可能会很大。
这种情况可以使用抽象工厂:
使用抽象工厂.png
ViewController只和ComponentFactory打交道,ComponentFactory可以创建对应theme的全部组件。
抽象工厂和工厂模式的区别在于,工厂模式是通过工厂方法创建对象,抽象工厂是通过抽象类创建对象。
网友评论