设计模式总结三(工厂方法模式、原型模式、模板方法模式和迪米特法则)
前言
这已经是我写的第三篇关于设计模式的博客了,在阅读《大话设计模式》一书的这么多天,我也有了不少收获。按照书上写的设计思想,我发现之前我做的很多demo或多或少有一些设计模式的思想,单大都不尽人意。设计模式能使得项目维护变得可能,以及是方便,它更多注重的是编程思想和做事的思路,而不是一种具体的模块和怎么使用的指南性书籍。
上一次,我总结到了第七章的代理模式,这一次从第八章开始总结,到第11章为止,一共包含了工厂方法模式、原型模式、模板方法模式和迪米特法则四部分内容。以下是前两篇的总结:
工厂方法模式
工厂方法模式是对第一章所讲的简单工厂模式,进行修正和改新,运用多态让子类决定实例化化,替代简单工厂模式的if或者switch语句。
书中对工厂方法模式的定义如下所示:工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式结构图如下所示:

而简单工厂模式则仅仅是考虑用一个单独的类,来做这个创造实例的过程。这个类就像是工厂批量生产产品一样,得名简单工厂模式。
工厂方法模式吧简单工厂模式内部逻辑判断转移到了客户端代码来进行。于是在增加新的功能时,简单工厂模式是修改工厂类,而工厂方法模式是修改客户端代码。工厂方法模式较简单工厂模式,克服了后者违背“开放-封闭原则”的缺点,同时又保持了封装创建对象过程的优点。
原型模式
书中使用了打印简历为例子,介绍了原型模式。原型模式实际上就是从一个对象在创建另一个“可定制”的对象,且创建不需要知道任何细节。书中对于原型模式的定义如下:
原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
具体来说,在基类提供一个clone成员函数,用this指针,返回整个类的的浅拷贝来实现。作者在9.5节介绍了浅拷贝与深拷贝,然后在9.6节写了该项目的深拷贝实现。具体思路是提供clone方法调用的私有构造函数,并修改成员函数clone,在函数clone中调用构造函数来实现深拷贝。
模板方法模式
书里举了抄考卷的例子来解释模板方法模式的用途,即将相同行为搬到超类,去除子类中重复的代码,于是实现了代码复用。就如同中学时候,老师卷子布置的太多只能抄答案,一张卷子除了学号姓名已经改动的少数题目不一样外,其余部分都是一模一样的,很好的体现了模板方法模式的思想。
书中对于模板方法模式的定义是这样的:模板方法模式定义一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变任何一个算法的结构即可重新定义该算法的某些特定步骤。
模板方法模式结构图如下所示:

迪米特法则
书上在P102页介绍了迪米特法则,迪米特法则也叫最少知识原则,迪米特法则(LoD)的和心思想是如果两个类不用通信,那么这两个类就不应当发生直接的相互作用。但如果其中一个类必须要调用另一个类的某个方法的时候,需用第三者转发这个调用。
依我看来,在这样的类设计结构里,同个类的每个成员尽量都该设置为private,这样其他的类便不知道它的存在,以实现类之间的松耦合。这样的话有利于每个类的复用,维护的时候修改起来也不会影响到其他类。
结语
再接再励!End

浙公网安备 33010602011771号