zoukankan      html  css  js  c++  java
  • 设计模式详细系列教程 (二) 创建型模式



      1.工厂方法模式(Factory Method)

                定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类.

           

           例如:雷锋帮助别人,雷锋并不指具体哪个人,可以是大学生、社区志愿者等等;我们可以写一个雷锋工厂接口IFactory(创建对象的接口),然后,让ColleageFactory类、VolunteerFactory类类来实现这个接口(子类)。如果需增加子类增加代码即可,克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。

         2.抽象工厂模式(Abstract Factory)

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

          例如:数据访问程序,我们对数据库操作时,可能会SQL server、DB2、Access等不同数据库操作,可能给不同表插入、获得的记录。

           如果想在SQL server数据库中,在User表增加一条记录,我们可以写一个接口IFactory,再写一个SQLserverFactory类,对SQL server 数据库中表User增加记录;当你想对Access数据库中User表操作时,增加一个AccessFactory类,即可。另外为了解耦客户端直接操作数据库,需要把对数据库的操作提取出一个接口IUser。

         3.建造者模式(Builder)

         

       例如:建造小人,有胖人、瘦人、高的、矮的等等,在建造时难免会出错,少造个腿或胳膊等,利用建造这模式可解决这个问题。

           Builder是一个抽象类,定义了一些基本建造方法(人的基本组成部分,如头、胳膊、腿、身体),具体的高、瘦等细节由子类来实现,用Director类使对象建造过程与外部(客户端)分离,减少耦合。

        4.原型模式(Prototype)

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

         例如:简历复印,我们有一份原简历,需要复制多份或复制出和原简历差不多的简历,就可用原型模式写一个Prototype抽象类,里面定义一个抽象Clone()方法,然后,由ConcretePrototype具体实现。这里面经常涉及的浅复制和深复制问题,应该注意。

         5.单例模式(Singleton)

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

        通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

         单例模式可能会有安全问题,当多线程调用GetInstance()时,可以用lock语句是一段代码位于临界区,一个线程进入后,另一个线程就不能进入这段代码区,直到第一个线程释放该对象。







  • 相关阅读:
    Linux常用命令 rm命令详解
    Python 面向对象(一)入门篇
    Python习题集(十六)
    Python 面向对象(三)公共变量,受保护变量,私有变量
    洛谷P1309 瑞士轮(归并排序)
    185. [USACO Oct08] 挖水井
    洛谷 P1078 文化之旅(CODEVS 1316)
    CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)
    186. [USACO Oct08] 牧场旅行
    157. [USACO Nov07] 奶牛跨栏
  • 原文地址:https://www.cnblogs.com/lilongsheng/p/3226130.html
Copyright © 2011-2022 走看看