zoukankan      html  css  js  c++  java
  • 简单工厂模式,工厂方法模式,抽象工厂模式

    简单工厂模式、抽象工厂模式、工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性,也就是说更好的体现开放封闭原则。

    简单工厂模式:

    概念:

           简单工厂模式是类的创建模式,又叫做静态工厂方法模式,是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色、抽象产品角色以及具体产品角色。

    结构图:

             

    分析:

           一: 简单工厂类是整个模式的关键所在,包含了必要的逻辑判断,根据给定信息,决定究竟应该创建哪个类的对象。客户端可以免除直接创建产品对象的责任,而仅仅负责消费对象就可以了,这种做法就实现了对职责权利的分割,有利于优化结构。

          二:工厂类集中了所有实例的逻辑,违反了高内聚这一原则,它所能创建的类只能是事先考虑好的,如果一旦添加新的类就需要改变工厂类了;同时,当具体产品增 多时,可能就会出现工厂类根据不同的条件创建不同实例的需求,这种对条件的判断和对具体产品类型的判断交错在一起,容易产生错误,对系统的维护和扩展也不 利。这些都在工厂方法模式中得到改善。

    工厂方法模式:

    概念:

            又叫虚拟构造器模式或多态工厂,它先一个用于创建对象的接口,然后让子类决定实例化哪一个类。也就是说工厂方法让一个类的实例化延迟到其子类。

    结构图:

                

    分析:

           一:在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去完成,这就允许系统在不修改工厂角色的情况下,创建新的产品。

           二:工厂方法模式集中封装了对象的创建,在更换对象时,不要做大的改变就可以实现,降低了客户程序与产品对象的耦合,是简单工厂模式的进一步抽象和推广。

    抽象工厂模式:

    概念:

           提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

    结构图:

            

     其中:

            AbstractProductAAbstractProductB是两个抽象产品,它们都有可能有两种不同的实现。

            Product1Product2Product3Product4是对两个抽象产品的具体分类的实现。

           AbstractFactory抽象工厂接口,包含所有产品的创建的抽象方法。

           ConcreteFactory1ConcreteFactory2是具体工厂,实现生成抽象产品的方法,生成一个具体的产品

    分析:

           一:易于交换产品系列,具体工厂类在一个应用中只需要初始化的时候出现一次,这就使改变一个应用的具体工厂变得容易,它只需要改变具体工厂即可使用不同产品配置。

           二:让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品具体类名也被具体工厂实现分离,不会出现在客户代码中。

           三:对产品的扩展比较麻烦,费力,如果需要增加一个新产品,则要改动几乎所有的工厂类。

    类实例图:

    简单工厂模式:

             

    工厂方法模式:

                

               

    抽象工厂模式:

                               

    综上比较:

    产品族:属于不同产品等级结构,但功能相互关联的产品组成的集合。

    简单工厂模式:

    生成同一等级中的任何产品

    创建工厂,工厂的作用就是创建接口

    工厂类包含必要逻辑判断,根据客户端的选择动态实例化相关类

    工厂方法:

    生成统一等级结构中的固定产品

    只有一个抽象产品类,可以派生出多个具体的产品类

    每个具体工厂类创建一个具体产品类的实例

    把简单工厂的内部逻辑判断移到客户端来实现,若要增加功能,修改客户端代码

    客服简单工厂违背的开放封闭原则,保持封装对象创建过程的优点

    抽象工厂:

    用抽象工厂创建产品

    生产不同产品族的全部产品

    有多个抽象产品类,每个抽象产品类可以派生出多个具体的产品类

    每个具体工厂类创建多个具体产品类的实例

  • 相关阅读:
    silverlight中path对象使用总结
    推荐一款Silverlight数据列表控件AgDataGrid
    在silverlight中实现Marquee效果
    在silverlight中使用IsolateStore隔离存储(下)
    在silverlight中使用IsolateStore隔离存储(上)
    在Silverlight中使用DynamicMethod(动态方法)
    使用createObject(createObjectEx)创建silverlight对象
    在Silverlight中使用Json
    怎么这两天总能看到刺激我的好东西
    使silverlight适应IE窗口大小的方法
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5079104.html
Copyright © 2011-2022 走看看