• 《大话设计模式》笔记(1)——创建型模式


     1、简单工厂模式/静态工厂方法

      定义:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

      UML:

       PS这个设计模式太简单了,没什么好解说的,简单来说就是通过传入一个标识到工厂类方法中,返回相应的具体产品。

     

    2、工厂方法模式

      定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

      UML:

       PS:简单工厂模式的优点在于工厂类中包含了必要的逻辑判断,根据客户端传入的标识来动态实例化相应的类。

        工厂方法模式是把简单工厂的内部逻辑判断,移到了客户端进行,由客户端调用具体的工厂类ConcreteFactory去生成相应的具体产品ConcreteProduct。如上面UML中所示,每一种产品都有相应的工厂类ConcreteFactory,有多少种产品就有多少个工厂类ConcreteFactory。

     

    3、抽象工厂模式(Abstract Factory)

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

      UML:

      PS:比如我们的系统需要同时支持Oracle和MSSql,那我们可以把上面UML中的ProductA1看做是对Oracle数据库的操作,ProductA2看做是对MSSql数据库的操作,这时使用抽象工厂模式的好处时,如果哪天需要把MSSql数据库切换成Oracle数据库时,就只需要更改使用到ConcreteFactory的地方就可以。此模式主要利用的就是面向接口编程的优点。该模式可以配合简单工厂模式,或用反射+配置文件的方式来进一步优化。

     

    4、建造者模式(Builder)

      定义:建造者模式又称生成器模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

      UML:

      PS:具体建造者类ConcreteBuilder.BuildPart()只建造成品的特定组件,ConcreteBuilder中可能有多个BuildPart()去建造各种组件,然后具体成品的组装则由Director来完成。我第一反应是觉得Director完全没有存在的必要,直接都由建造者来完成就可以了,但再想想时觉得,这也许就是减耦建造组件和组装组件的耦合。至于是把代码放在同一个类中或多个类中不一定就对模式有破坏性。

      参考代码:

     

      应用场景类比:建造胖瘦小人

      

    5、原型模式(Prototype)

      定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

      UML:

     

      PS:原型类中定义一个方法来克隆自身,可以实现ICloneable接口来完成原型模式。

      应用场景类比:简历复制

     

    6、单例模式(Singleton)

      定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。

      UML:

     

      PS:单例模式应该是平时应用比较多的一种模式,该模式主要在于把构造函数设置为私有,并提供一个可供全局访问的点。虽然说常用,但还是有两点值得一提的。一是单例类声明为sealed,以防止派生增加实例的风险,二是多线程中使用时要双重锁定。这种实现方式是我之前常用,这种方式被称为赖汉式单例类,因为它只有第一次被引用时,才取实例化。另外还有一种饿汉式单例类,它是把instance设置为静态,并在声明赋值时实例化,这种”静态初始化“方法就不需要考虑多线程的问题。这两种方式各有利弊吧,看实际需求取舍吧。

  • 相关阅读:
    程序员的九重境界,你是第几重?
    一个常用的正则表达验证类(转载)
    学习程序设计的态度
    科技期刊学术不端文献检测系统(转载)
    用GridView设计固定行数的入库单报表
    JavaScript技巧集
    线程的概念
    java实验三 类的继承与多态
    常见的网络攻击手段及防御方法
    类和对象的概念(转载)
  • 原文地址:https://www.cnblogs.com/Lau7/p/8350503.html
Copyright © 2020-2023  润新知