zoukankan      html  css  js  c++  java
  • 设计模式学习(三)单件模式生成器模式

      单件模式

    某种程度上,单件模式是限制而不是改进类的创建,但它仍属于创建模式。单件模式可以保证一个类有且只有一个实例,并且提供一个访问它的全局访问点。在程序设计过程中,有很多情况需要确保一个类只能有一个实例。例如:任务管理器,打印机COM1 端口等。

    使用静态变量实现单件模式,设计特殊的异常类,当单件实例已经存在的时候,抛出异常。

    提供一个单件的全局访问点:

    1 在程序的开头创建单件,并将其作为参数传递到需要使用它的类中。

    2 在程序中创建一个所有单件类的注册表,并使注册表始终可用。 每次实例化一个单件,都将其记录在注册表中。程序的任何部分都能使用标识符串访问任何一个单件实例,并能取回相应的实例变量。

    提供一个全局访问点的最常用的方式是使用类的静态方法,类名始终是可以用的,静态方法只能由类来调用,不能由类的实例调用。

    生成器模式

    适用场景:由于显示数据的不同而完全不同的用户界面,例如:E-mail地址簿,既有个人信息也有组的信息。

    理解:根据数据的不同,显示数据的界面由特定的类来动态生成和显示。

    对于报表系统应该可以使用生成器模式来设计,根据不同的报表类型,来显示不同的数据和格式,需要一个判断生成类,一个各个报表相同属性的类,一个接受页面,多个不同报表的生成类。

    其实,生成器模式有点像页面工厂,专门根据不同数据生成不同的页面部件。

    生成器模式的效果:

    1 生成器允许读者改变产品的内部表示,同时也隐藏了产品如何组装的细节。

    2 每个特定的生成器都独立于其他的生成器,同时独立于程序的其他部分,这一点提高了对象的模块性,并使添加其他的生成器变得相对简单。

    3 由于每个生成器是根据数据一步一步构建最终结果的,所以能精确的控制生成器构建的每一个结果。

    生成器模式有点类似于抽象工厂模式,两者都返回由许多方法和对象组成的类。他们之间的主要差别是:抽象工厂返回的是一系列相关的类,而生成器是根据提供给他的数据一步一步的构建一个复杂的对象。

    理解:抽象工厂模式一次返回一系列复杂的相关类,生成器模式则是一步一步的判断数据,一步一步地生成一个复杂的对象。一个并不需要实际的数据,一个需要实际数据,依赖于实际数据来生成。
  • 相关阅读:
    hdu 5387 Clock (模拟)
    CodeForces 300B Coach (并查集)
    hdu 3342 Legal or Not(拓扑排序)
    hdu 3853 LOOPS(概率DP)
    hdu 3076 ssworld VS DDD(概率dp)
    csu 1120 病毒(LICS 最长公共上升子序列)
    csu 1110 RMQ with Shifts (线段树单点更新)
    poj 1458 Common Subsequence(最大公共子序列)
    poj 2456 Aggressive cows (二分)
    HDU 1869 六度分离(floyd)
  • 原文地址:https://www.cnblogs.com/xh831213/p/870832.html
Copyright © 2011-2022 走看看