1、设计模式的本质是优化访问
设计模式要我说,四个字:优化访问。什么叫优化访问呢?一切源于从事物与事物之间的交互,在程序中就是从“客户类访问服务类”开始。
什么客户类? 什么是服务类呢?不好意思,照顾小白,先谈两个概念。
class S { public void HelloWord(){ print "HelloWorld"; }; }
class C { public void Test(){ S s = new S(); s.HelloWord(); } }
C类调用了S类,即C类消费了S类,故C类就是客户类,而S类就是服务类。
首先,假如一个客户类,一个服务类。服务类也比较简单,也不用扩展,并访问一次就够了,一行代码足已:TestClass t = new TestClass();t.HelloWorld();t = null,设计模式就用不着了。
然而,实际程序中的服务类并不像HelloWorld这些简单。往往代码都在成百上千行,甚至上万行。因此,我们假定服务类不可替代,于是才有了设计模式。
服务类是个不可替代的资源。设计模式的本质,就是帮助客户类更好的消费服务类,并促进服务类所带来红利的再分配。
再看看程序中代码的现实情况:
一、实际中的服务类之间关系复杂,数量繁多,而且还在不断演化。
二、实际中的客户类之间也关系复杂,数量繁多。
三、实际中客户类对服务类的访问非常频繁。
继于服务类的不可替代性与代码的现实情况,设计模式会在客户类与服务类之间构建一个中介。
因为设计模式中有一个中介者模式,为了避免同名,我们称这个中介类它为模式类。
【客户类】→【模式类】→【服务类】
这个模式类,就是设计模式的着眼点。它不是服务类的子类,往往比服务类更抽象些。服务类重点在于其内容,而模式类重点在于其形式。
客户类正是通过访问模式类,来达到访问服务类的实效。
然而模式类并不能代替实际的服务类,最终的的业务实现还是靠服务类。
可以这么理解:服务类好比现实世界中的工厂生产与农业生产,而模式类好比商业与服务业。商业服务业只负责再分配,并不负责生产。而模式类也是如此。
商业让现实世界更加繁荣,而设计模式也让程序设计更富有弹性与力量。
设计模式的任务就是主要通过接口实现,而不是通过继承,进行构建模式类,有必要的话对服务类进行边缘改造(非业务改造),最终达到C类对S类的访问优化。