(本人初学设计模式,希望大哥大姐对我的浅薄和错误之处批评指正)
创建型模式解决的问题主要是对象如何被更方便的实例化。
书中介绍的5种创建型模式中,最基础的应该是工厂模式吧。要得到某种产品,用户无需知道这种产品是由哪个类创建,用户只需将需求转交给生产这种产品的工厂。这些工厂可以是继承自一个抽象类,这样它们就拥有统一的接口,而且抽象类还可以对某个生产过程定义缺省操作。书上还提到了应用框架中App和Doc的关系,我刚刚学习MFC不久,但似乎MFC中文档的生成方式也有这种模式的影子。MFC中的CxxApp和CxxDoc都是继承自CWinApp和CDocument,两个父类还定义了很多缺省操作。文档的生成也不是用户自己new的,印象中文档类的构造函数是保护的。
关于抽象工厂模式,我个人的感觉,它是带有对象组合的工厂模式,它的每一个工厂都可以生产一个产品系列,这个产品系列中的各种产品已经由工厂完成了特定方式的组装。
上面两种模式的最大优点是它的接口化程度很高。但是它们的可扩展性太差,新的产品总是要求有新的类。而原型模式很好的解决了这一点。原型模式主要依赖于拷贝构造函数。当有一个新产品时,原型模式将实例化一个符合该产品属性要求的对象而不是新加一个类,以后生产这种产品时,只要拷贝已有的产品对象就可以了。这种模式的缺点吗,目前我还不知道,希望看到这篇文章的大哥大姐指点一下。
关于生成器模式,好像现在用得满多,各种reader如AcrobatReader似乎就是套用了这种模式。别人用Acrobat做成pdf文档,其他人就可用之用一个reader来阅读,对象的表示与构造是分开的。
最后就是单件模式了,以前我也曾遇到过这种问题,当时我是声明了一个静态成员变量表示该类对象的个数,当在构造函数中发现个数一大最大允许个数时便报出异常。现在想来书里提供的方法实在是比我的高明得多。
总的来说,我觉得还是原型模式好,它甚至可以动态的配置所生产的产品,这一点实在是太强了。用在文档的序列化里效果应该不错。