单件模式
某种程度上,单件模式是限制而不是改进类的创建,但它仍属于创建模式。单件模式可以保证一个类有且只有一个实例,并且提供一个访问它的全局访问点。在程序设计过程中,有很多情况需要确保一个类只能有一个实例。例如:任务管理器,打印机COM1 端口等。
使用静态变量实现单件模式,设计特殊的异常类,当单件实例已经存在的时候,抛出异常。
提供一个单件的全局访问点:
1 在程序的开头创建单件,并将其作为参数传递到需要使用它的类中。
2 在程序中创建一个所有单件类的注册表,并使注册表始终可用。 每次实例化一个单件,都将其记录在注册表中。程序的任何部分都能使用标识符串访问任何一个单件实例,并能取回相应的实例变量。
提供一个全局访问点的最常用的方式是使用类的静态方法,类名始终是可以用的,静态方法只能由类来调用,不能由类的实例调用。
生成器模式
适用场景:由于显示数据的不同而完全不同的用户界面,例如:E-mail地址簿,既有个人信息也有组的信息。
理解:根据数据的不同,显示数据的界面由特定的类来动态生成和显示。
对于报表系统应该可以使用生成器模式来设计,根据不同的报表类型,来显示不同的数据和格式,需要一个判断生成类,一个各个报表相同属性的类,一个接受页面,多个不同报表的生成类。
其实,生成器模式有点像页面工厂,专门根据不同数据生成不同的页面部件。
生成器模式的效果:
1 生成器允许读者改变产品的内部表示,同时也隐藏了产品如何组装的细节。
2 每个特定的生成器都独立于其他的生成器,同时独立于程序的其他部分,这一点提高了对象的模块性,并使添加其他的生成器变得相对简单。
3 由于每个生成器是根据数据一步一步构建最终结果的,所以能精确的控制生成器构建的每一个结果。
生成器模式有点类似于抽象工厂模式,两者都返回由许多方法和对象组成的类。他们之间的主要差别是:抽象工厂返回的是一系列相关的类,而生成器是根据提供给他的数据一步一步的构建一个复杂的对象。
理解:抽象工厂模式一次返回一系列复杂的相关类,生成器模式则是一步一步的判断数据,一步一步地生成一个复杂的对象。一个并不需要实际的数据,一个需要实际数据,依赖于实际数据来生成。