zoukankan      html  css  js  c++  java
  • GOF23-工厂模式

    1.什么是工厂模式

    就是实现创建者与调用者分离,工厂模式的核心(灵魂)其实就是:分工。

     

    2.工厂模式有哪些

    • 简单工场模式(静态工厂)

    简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接受的参数的不同来创建不同的对象并返回。其缺点是对新增的业务类无能为力,必须要修改代码来完成扩展(不满足OCP原则)。

    我们先来看下没有工程类的情况

    image imageimage

    测试类Main方法及测试结果:

    image

    image

    我们可以看出创建对象要直接与Audi、BMW类直接打打交道。

    我们再来看使用简单工厂类

    imageimageimage

    可以看出,测试类并没有直接跟Audi、BMW类“直接打交道”,而是通过CarFactory来达到目的,可以理解创建对象的活已经交给CarFactory来做,不再由测试类直接创建(这也就是所谓的控制反转)。

    • 工厂方法模式

    创建工厂类接口,通过新增业务类,来满足新功能(满足OCP原则),缺点:结构变得更加复杂,代码更加复杂,理论上工厂方法更优,但实际我们常用简单工厂模式。

    我们需要创建一个工厂接口,及对应工厂实现类。

    imageimageimage

    测试类及结果

    image image

    可以看出,我们是通过新增产品工厂类来实现产品对象的创建,试下如果要新增一个保时捷对象,我们此时需要怎么做?其实我们只需要新增一个保时捷的工厂类(实现CarFactory)即可。与简单工厂模式相比较:工厂方法模式结构更复杂(需要多个产品类),代码上也相对复杂,管理难度大(维护起来麻烦)。

    • 抽象工厂模式

    适用于生成不同产品族的全部产品,对于新产品无能为力,而是适用于产品族。比其上面两种工厂模式更复杂。

    假设我们现在要创建多个接口产品,上面两种工厂模式就无能为力了。

    imageimageimage

    image

    我们目前仅创建了一个Engine接口,分别创建了超级引擎类,中端引擎类,低端引擎类。其余接口由于篇幅关系就不一一截图了,道理类似。比如:我们再增加一个座椅接口,再分别创建超级座椅,中端座椅,低端座椅。

    超级引擎+超级座椅+超级轮胎=超级汽车

    中端引擎+超级座椅+超级轮胎=中级汽车

    ……..

    这就形成了不同产品族。

    image image

    测试类及结果

    imageimage

    超级汽车工厂创造出汽车引擎是超级引擎。

    3.总结

    • 简单工厂

    即使在某种程度上不满足OCP设计原则,但是实际项目中用的最多。

    • 工厂方法

    在不修改已存在类的前提下,通过增加新的工厂类来达到实现扩展的目的。

    • 抽象工厂

    不能单独增加某个产品,可以增加产品族。

  • 相关阅读:
    Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments环境代码详解
    zc.buildout构建项目时报错‘AttributeError: '_NamespacePath' object has no attribute 'sort'’
    利用Jenkins打包ISO和QCOW2镜像文件
    解决python pip安装提示"not a supported wheel on this platform"
    Kali 2017.3开启VNC远程桌面登录
    Jenkins邮件扩展插件Email Extension Plugin配置使用
    Jenkins执行sudo权限的设置
    如何解决源码安装软件中make时一直重复打印configure信息
    CentOS 7下安装配置proftpd搭建ftp服务器
    如何使用capedit分割数据包文件
  • 原文地址:https://www.cnblogs.com/leebaul/p/11366820.html
Copyright © 2011-2022 走看看