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

    参考链接:三种模式的代码和UML图:https://www.cnblogs.com/yssjun/p/11102162.html

    优缺点,应用场景:https://www.runoob.com/design-pattern/factory-pattern.html

    1. 工厂模式是什么?

      1. 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式该模式用于封装和管理对象的创建,是一种创建型模式
    2. 工厂模式的应用场景

      1. BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
      2. 设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。
      3. 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
    3. 工厂模式的优缺点

      1. 优点

        1. 一个调用者想创建一个对象,只要知道其名称就可以了。
        2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
        3. 屏蔽产品的具体实现,调用者只关心产品的接口。
      2. 缺点

        1. 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖
    4. 三种工厂模式

      1. 简单工厂模式(需要知道要生产的手机类型)

        1. 该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:
        2.  
      2. 工厂方法模式(知道那个工厂生产那个手机)

        1. 和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,其UML类图如下:
        2.  
      3. 抽象工厂模式(扩展工厂生产的产品,工厂相当于品牌,生产多种类型产品)

        1. 最简单的方式是把2中介绍的工厂方法模式完全复制一份,不过这次生产的是PC。但同时也就意味着我们要完全复制和修改Phone生产管理的所有代码,显然这是一个笨办法,并不利于扩展和维护。
        2. 抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。
        3. 其UML类图如下:
      4. 总结:

        1. 上面介绍的三种工厂模式有各自的应用场景,实际应用时能解决问题满足需求即可,可灵活变通,无所谓高级与低级。
        2. 此外无论哪种模式,由于可能封装了大量对象和工厂创建,新加产品需要修改已定义好的工厂相关的类,因此对于产品和工厂的扩展不太友好,利弊需要权衡一下。 
    努力不一定成功,但不努力一定会失败~
  • 相关阅读:
    WEB服务器和应用服务器
    java中乱码问题
    面向对象的特征
    数据库中常见的需注意的问题
    String类
    网络编程
    C#泛型基础
    C#中sealed关键字的作用。
    C#自动属性优缺点分析
    TextView属性(转)
  • 原文地址:https://www.cnblogs.com/Smileing/p/13716103.html
Copyright © 2011-2022 走看看