zoukankan      html  css  js  c++  java
  • 设计模式之Factory

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则

    介绍:

    Factory Pattern有3种当然是全部是creational pattern。

    1.Simple Factory Pattern

    2.Factory Method Pattern

    3.Abstract Factory Pattern

    这三个Pattern都以在之前模式基础上演变而来。

    Factory Pattern是把同一类型的东西都封装在了Factory类中,使用什么Product只要通过Factory创建就可以了。

    1.Simple Factory Pattern

    简单工厂模式仅仅把product类封装在一个类中。并没有使用抽象类。

    模式结构:

     

    简单工厂模式只要了解就行。因为缺点比较多。

    比如说增加一个ConcreteProductC的时候需要改动Factory类,只明显违背了开闭原则。

    2.Factory Method Pattern

    在工厂方法模式中优化了一下简单工厂模式。它考虑到了今后会扩展。

    改善方式如下:

    不难看出它比简单工厂模式多了以个抽象类当做工厂类的父类。每一个具体工厂类只负责创建一个具体产品。

    模式结构:

    这种模式把每一个产品都由独立的一个具体工厂类去负责创建。这样今后扩展那么就可以满足开闭原则。

    只需添加一个ConcreteFactory+ConcreteProduct就可以了。

    在客户端代码中只需:

    Factory factory;
    Product product;
    factory=new ConcreteFactory();
    product =factory.factoryMethod();

    如果你想创建其他的product那么只需更改对应的具体工厂即可。

    但是此种模式还是有缺点的。虽然它满足了开闭原则,但是一个工厂只创建一个产品,这使得今后增加多个产品时需创建多个工厂。类的数量聚居膨胀。

    3.Abstract Factory Pattern

    在抽象工厂模式中优化了一下工厂方法模式。它考虑到了今后会扩展导致工厂巨增开销比较大的问题。

    在抽象工厂模式中引入了一个产品族的概念。也就是说如果是一个产地的东西那么就由一个工厂去负责。并且一个工厂会有多个部门(方法)来负责每一个产品的创建。

    模式的结构:

    从模式的结构中可以看出。抽象工厂模式在工厂方法模式的基础上在ConcreteFactory中增加了多个createProduct的方法。

    这样一来就不用增加一个产品时需加一个工厂了。但是抽象工厂也有很多问题例如他又不满足开闭原则了。 额~

    一般用反射工厂模式,把包名+类名存到文件里然后通过反射去创建,例如:http://snowteng17.blog.51cto.com/1532294/330453

  • 相关阅读:
    Python 强制停止多线程运行
    自动化测试 Appium之Python运行环境搭建 Part2
    自动化测试 Appium之Python运行环境搭建 Part1
    Genymotion Android模拟器Genymotion的安装和使用
    Easyui datagrid combobox输入框下拉(取消)选值和编辑已选值处理
    性能测试 接口性能测试需要注意的点
    Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
    lintcode:整数排序||
    lintcode:整数排序
    lintcode:玩具工厂
  • 原文地址:https://www.cnblogs.com/hongguang-kim/p/5736114.html
Copyright © 2011-2022 走看看