之前学习过几遍设计模式,在这次软考准备过程中,对设计模式又进行了系统的复习,以下是我的小小收获。
***************************************创建型***********************************************
1、 抽象工厂 Abstract VS 工厂方法 Factory Method
抽象工厂解决需要提供多种业务,多种产品的问题,比如《大话设计模式》中提到的两种类型的数
据库和每种数据库下的增删改,每种类型抽象出一个接口,数据库抽象出一个接口,而反射解决了更换“数据库类型”这种分支的方法。工厂方法针对一个产品等级结构,可以说,一个大棚种一个类型的蔬菜。
可参考:http://blog.csdn.net/wyxhd2008/article/details/5597975
2、生成器/建造者 Builder
关键在指挥者 Director,将不变的建造过程封装到Director中,main直接调用Director来完成操作,不用知道内部具体过程,所以,可以在不用通知main的情况下,更换结构,用户只知道Director。并且,可以相同的构建过程通过不同的建造者得到不同的结果。
应用场景:玩游戏的时,每关的地图都会变化,简单说,地图会有晴天和阴天之分,那么创建地图时就要根据晴天或者阴天来对地图上的场景,比如:天空,树,房子,和路面进行渲染,这个过程是一个固定的,每创建一个新地图都要执行这几个渲染,这是针对高级配置的电脑来说的。现在拥有低配置电脑的人不在少数,针对低配的电脑只要将地图中占用资源比较高的渲染去掉就可以,比如带反射光影的树,这时候需要创建不同的地图,但地图的创建过程却是固定的,建造者模式完全可以应对这样的情况。
可参考:http://www.cnblogs.com/xieweikai/p/6826481.html
3、原型模式 Prototype
创建原型实例指定创建对象的类型,复制原型得到与此类型相同的对象。
复制使用了Memberwise Clone 的方法,由于这个方法执行复制时,对值类型的字段进行逐位复制,对引用类型的字段,只能复制引用,所以,用浅复制解决复制值类型字段,深复制解决复制引用类型字段。
应用场景:如果创建新对象成本较大,我们可以利用已有的对象进行复制来获得。原型模式向客户隐藏了创建对象的复杂性。客户只需要知道要创建对象的类型,然后通过请求就可以获得和该对象一模一样的新对象,无须知道具体的创建过程。
可参考:http://cmsblogs.com/?p=367
4、单例模式 Singleton
一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式的应用,大家都比较熟悉,不再赘述。要注意,单例模式中的双重锁(多线程)和懒、饿汉两种生成方法(要空间还是要时间的问题)。
总结:
根据需求,花式创建对象。