zoukankan      html  css  js  c++  java
  • 设计模式——工厂(简单工厂、工厂方法、抽象工厂)

    开发过程中经常听到工厂这个词,其实根据个人经验,简单工厂用的是比较多的。工厂方法和抽象工厂是GoF23种设计模式中的一种,而我们常使用的简单工厂并不是一种设计模式,可以说是我们自己的一种俗称。

    定义

    简单工厂: 直接通过一个Factory类创建多个实体类的构造方式。
    
    工厂方法: 一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。
    
    抽象工厂:个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。
    

    工厂方法与抽象工厂区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    模板

    简单工厂

    工厂方法

    1. AbstractProduct : 抽象产品 (在工厂方法模式中只有一个AbstractProduct)
    2. ConcreteProductXXX : 具体的产品类
    3. AbstractFactory: 抽象工厂类
    4. ConcreteFactory: 具体工厂类(每个工厂只能创建一个具体产品)

    抽象工厂

    1. ProductX : 产品接口(抽象工厂中可以有多个产品抽象类)
    2. ConcreteProductX : 具体产品
    3. Creator: 抽象工厂类(也可以叫Factory,定义了创建多个产品种类的的接口)
    4. ConcreateCreateX: 具体工厂

    实例

    参考: 浅谈简单工厂,工厂方法,抽象工厂的区别和使用

    优点

    1. 将对象的构造与获取隔离
    2. 面向接口编程,可以动态增加Product/Factory,而且方便单元测试
    3. 一般还可以在工厂中统一维护一个单例(单例模式、静态方法)
    4. 广义上讲其实工厂模式也是一种外观模式,屏蔽了具体的创建过程。

    缺点

    1. 增加了多个类/接口,增加了系统的复杂性

    参考:
    https://www.cnblogs.com/gclokok/p/10029088.html

  • 相关阅读:
    HTML学习(4)属性
    HTML学习(3)基础
    HTML学习(2)编辑器
    HTML学习(1)简介
    winform学习(10)设置控件透明背景色
    winform学习(9)无边框拖动窗体
    《分布式机器学习:算法、理论与实践》——【RE5】
    《分布式机器学习:算法、理论与实践》——【RE4】
    《机器学习在搜索广告中的机遇和挑战》
    >>《learning to rank(ltr)
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/12153200.html
Copyright © 2011-2022 走看看