• 设计模式之创建型


                        设计模式之-创建型

                             GOF的23种设计模设可以分为三大类,创建型,结构型,行为型.

    定义

           所谓创建型模式,就是处理类或者对象创建的设计模式,试图根据实际情况使用合适的方式创建类和对象。基本的类和对象的创建方式可能会导致设计和维护上的问题,或增加了设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决这些问题。

    思想

           创建型模式由两个主导思想构成。

    一是针对类的创建,就是将系统使用的具体类封装起来,

    二是针对对象的实例化,就是隐藏这些具体类的实例创建和结合的方式

    种类

           GoF23种设计模式中创建型模式有5种,

    设计模式

    GoF的描述

    我的理解

    Singleton单例模式

    保证一个类仅有一个实例,并提供一个该实例全局的访问点

    同一时刻只能被一个线程访问情况

    Abstract Factory抽象工厂模式

    提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们的具体类

    提供一个接口,用来产生多个相关的不同对象

    Builder建造者模式

    将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示

    用于复杂对象的构建;这个对象的组成部分可能是

    经常变化的,该对象是通过一定的算法由子对象构建

    Factory Method工厂方法模式

    定义一个用于创建对象的接口,让子类决定实例化那个类。FactoryMethod使得一个类的实例化延迟到子类

     根据提供的数据或者参数,返回一个抽象类的

    一个子类对象

    Prototype原型模式

    使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象

    大量相同或者相似对象的创建

    UML图展示

    1.抽象工厂模式

    2.建造者模式

    3.工厂方法模式

    4.原型模式

    5.单例模式

    使用

           现在软件设计更加依赖对象的组合,而不是类的继承,强调从硬编码的行为转变到定义一组基本行为来组合成复杂的行为。硬编码的行为不够灵活,因为如果想要改变设计的一部分,需要通过重写或者重新实现才能完成。另外,硬编码没有提高重用性,而且难以跟踪错误。由于这些原因,创建型模式比硬编码的行为更有用。创建型模式使设计变得更灵活,提供了不同的方式,从代码中移除了对需要实例化的具体类的引用。也就是说这些模式增强了对象和类之间的独立性。

    下面的情况可以考虑应用创建型模式:

    一个系统需要和它的对象和产品的创建相互独立。

    一组相关的对象被设计为一起使用。

    隐藏一个类库的具体实现,仅暴露它们的接口。

    创建独立复杂对象的不同表示。

    一个类希望它的子类实现它所创建的对象。

    类的实例化在运行时才指定。

    一个类只能有一个实例,而且这个实例能在任何时候访问到。

    实例应该能在不修改的情况下具有可扩展性。

    对比

    简单工厂、工厂方法、抽象工厂比较

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。

     

    ※简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。

     

    ※工厂方法:工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。

     

    ※抽象工厂:抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

         工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。

    区别:

    简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

    工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)

    抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

     

    抽象工厂模式和建造者模式比较

            抽象工厂模式是应对一系列对象的创建的问题,,抽象工厂模式更关注一系列的对象的创建

            建造者模式是应对一个复杂对象创建的问题,或者说是针对这个复杂对象中的子对象的创建的问题。

     

  • 相关阅读:
    设备树(Device Tree)
    深度Linux Deepin系统安装教程使用体验
    Qt Creator的安装与Qt交叉编译的配置
    移植tslib和Qt5.6到三星s5pv210开发板
    Linux下读取RFID卡号(C串口编程)
    如何移植openwrt系统
    如何在Qt Creator中添加库文件和头文件目录
    Qt Creator中如何选择某个子项目为启动项目
    QT中子目录调用另一个子目录
    在Qt项目中如何添加一个已有的项目作为子项目
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3014182.html
Copyright © 2020-2023  润新知