Skip to content

liyzzz/DesignPattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DesignPattern 设计模式

  • Factory Pattern 工厂模式:

      3w-what: 属于创建型模式,使用同一个接口指向创建的对象,对客户端屏蔽创建对象的逻辑
      3w-why: 简化创建逻辑(屏蔽创建过程)
      3w-how: 可以使用简单工厂模式,工厂方法模式,抽象工厂模式实现
    
    • SimpleFactory 简单工厂模式

        又名静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一,简单工厂模式是工厂模式家族中最简单实用的模式
      
      • 模拟场景:java,pyhon课程的创立
      • 代码实现:见factory模块com.liyueze.simpleFactory包和com.liyueze.common包
      • 测试类:在factory模块test下
      • 类图:

        image
        虚线箭头:指向依赖,依赖是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责
        虚线三角:指向接口;
      • 优点:只需传入一个参数就可创建需要对象
      • 缺点:工厂类职责过重,当增加新产品时需要修改工厂类违背开闭原则,不易于扩展复杂的产品结构
      • 适宜场景:产品结构较简单,且较稳定
    • FactoryMethod 工厂方法模式

            具体的创建工作由子类去实现,基类提供统一接口
            又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。
            该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
      
      • 模拟场景:java,pyhon课程的创立
      • 代码实现:见factory模块com.liyueze.factoryMethod包和com.liyueze.common包
      • 测试类:在factory模块test下
      • 类图:

        image
        虚线箭头:指向依赖,依赖是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责
        虚线三角:指向泛型(接口)
        实线三角:指向继承
      • 优点:解决了简单工厂的问题,加入新产品符合开闭原则(只需要继承工厂基类并重写创建方法)
      • 缺点:增加了代码结构的复杂度与理解难度
      • 适宜场景:产品结构不稳定,常常需要扩展
    • AbstractFactory 抽象工厂模式

      提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类。
      创建的对象需要多个维度确定
      
      • 模拟场景:创建数学系和计算机系的java,pyhon课程(课程需要系别[数学,计算机]和种类[java,python]两个维度确定)
      • 思路:创建系别工厂基类,定义课程种类(java课程,python课程)创建方法,并交给实现类(数学系工厂,计算机系工厂)去实现具体生成的课程
      • 代码实现:见factory模块com.liyueze.abastractFactory包和com.liyueze.common包
      • 测试类:在factory模块test下
      • 类图:

        image
        虚线箭头:指向依赖,依赖是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责
        虚线三角:指向泛型(接口)
      • 优点:将一个维度的产品统一到一起创立
      • 缺点:增加了代码结构的复杂度与理解难度,并且违背开闭原则(例如上例中每个系加入新的C++课程,就需要修改系别工厂代码。但是如果加入新的系只扩展不用修改)
      • 适宜场景:产品结构复杂存在相互依赖
      • 注意:尽量将不易变化的维度放在工厂内部的方法去创建(例如上例中课程种类不易变化),将易变化的维度充当工厂基类(例如上例中系别易变化)

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages