美文网首页
2020-12-14 《大话设计模式》之 UML & 工厂模式

2020-12-14 《大话设计模式》之 UML & 工厂模式

作者: GameDesign2018 | 来源:发表于2020-12-14 18:58 被阅读0次

    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

    参考

    1. 《大话设计模式》, 2007年7月,作者程杰
    2. Design Pattern - Refactoring

    相关文章

      网友评论

          本文标题:2020-12-14 《大话设计模式》之 UML & 工厂模式

          本文链接:https://www.haomeiwen.com/subject/ldpvgktx.html