抽象工厂vs工厂模式
工厂方法:继承,创建产品
抽象工厂:组合,创建产品家族
工厂方法模式只生产同等级产品,综合型工厂,生产多种类产品
具体工厂所生产的位于不同等级的一组产品称为一个产品族,海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。
一、定义与特点
提供相关或相互依赖接口,无需指定产品具体类得到不同等级产品
满足条件:(1)同族不同等产品。(2)只可能消费一族产品,同族产品一起用。
优点:多等级产品共同管理,不必引入多个新类管理。加新产品族不需改代码,开闭原则。
缺点:产品族增加新产品,所有工厂类都要修改。
二、结构与实现
同样:抽象工厂(个数不同)、具体工厂、抽象产品和具体产品
例子1:设计农场类:养动物/植物,养马、养牛、种菜、种水果等
1、抽象&具体产品
2、抽象&具体工厂
例子2:
1.抽象工厂Creator:List
2.抽象产品:ListIterator和Iterator,相当于ProductA和ProductB。ListIterator两个实现类,AbstractList.ListItr和LinkedList.ListItr,相当于ProductA1和ProductA2。Iterator的实现类为AbstractList.Itr,相当ProductB1,没有B2。
3.具体工厂类:LinkedList,相当于ConcreteCreator1,实现抽象工厂List,具体产品:LinkedList.ListItr和AbstractList.Itr。
4.ArrayList同上