2020-12-14 《大话设计模式》之 UML & 工厂模式
2020-12-14 本文已影响0人
GameDesign2018
UML
类与类, 类与接口之间本质都是继承关系
- 继承用实线(◁—)空心三角指向被继承的类/被实现的接口
- 实现用虚线(◁---)空心三角指向被继承的类/被实现的接口
- 关联(association)关系,实心箭头(←),指向被关联的项目
- 依赖(dependency)关系,虚心箭头(⇠),指向被依赖的项目,一个class内的某个method返回的实例的类型(Class/Interface/Instance,类/抽象接口类/实例)
- 合成组合(composition)关系,强拥有关系,实心菱形+箭头(◆→)菱形一边的包含箭头一边的
Composition: object A consists of objects B; A manages life cycle of B; B can’t live without A. - 聚合(aggregation)关系,弱拥有关系,空心菱形+箭头(◇→)菱形一边的包含箭头一边的
Aggregation: object A contains objects B; B can live without A.
简单工厂 vs 抽象工厂
抽象工厂为简单工厂的扩展,只是在产品层面扩充更多类型,可以理解为简单工厂只生产一类产品(这类产品的功能一致)
抽象工厂可以生产不同类型的产品,这些产品包含的功能也不同,但是在某种程度上属于需要构成某个东西的不同组件所以放在同一个抽象工厂里
1. 简单工厂
1.a 接口定义
- Product (Interface) 需要定义某些可以调用的method来实现产品功能
- Factory (Interface) 需要定义
def create_product() -> Product:
返回的是Product(Interface)
1.b 实现
- Product1 (Product) 实现Product需要的功能
- Product2 (Product) 实现Product需要的功能
- ...
- CustomFactory1(Factory) 实现创建Product1
def create_product() -> Product1:
- CustomFactory2(Factory) 实现创建Product2
def create_product() -> Product2:
- ...
2. 抽象工厂
2.a 接口定义
- ProductBolt (Interface) 需要定义某些可以调用的method来实现产品功能
- ProductNut (Interface) 需要定义某些可以调用的method来实现产品功能 实现的功能与Bolt不同
- Factory (Interface) 需要定义
def create_product_bolt() -> ProductBolt:
和def create_product_net() -> ProductNut:
2.b 实现
- ProductBolt1 (ProductBolt) 与Nut1是属于同一套
- ProductNut1 (ProductNut) 与Bolt1是属于同一套
- ProductBolt2 (ProductBolt) 另一套
- ProductNut2 (ProductNut) 另一套
- ...
- CustomFactory1(Factory) 生产bolt1和nut1
- CustomFactory2(Factory) 生产bolt2和nut2
- ...
Keywords
design pattern, uml, factory method, abstract factory
参考
- 《大话设计模式》, 2007年7月,作者程杰
- Design Pattern - Refactoring