模式的功能:最大程度地用抽象消除类之间的耦合关系,并且让类各司其职,防止功能重迭,提高可
重用性。
好的面向对象的设计,就是能够最大程度地消除类与类之间的依赖,提高系统的可扩展性、灵活性,
所以好的面向对象设计,必须符合一些原则,如开闭原则,DIP原则等等,而模式是实践这些原则的
惯用方法,下面谈谈我对模式的理解。
首先谈谈创建对象时使用到的一些模式,即创建模式。
Factory模式
面向对象缺少不了对象,如果有大量对象生成,对象生产的代码原来分布在程序的各个角落,而且
对象可能是通过构造函数生成,也可能通过类名反射生成,假如要对生产过程或者生产出来的对象加一些控制,
必须要修改所有生成对象的代码,为了体现集中控制,并减少其他类对对象生成的依赖,专门开辟
工厂用来生成对象,封装对象的生成过程。
Singleton模式
有时候一个类如果在内存中有多个实例,而这些实例只是实现相同的功能,状态也完全一样,这时就可以
考虑使用singleton来节省内存。例如Factory模式的工厂对象。再有的时候,我们原来就期望系统中只存在类
的一个实例,如连接数据库的connection对象,我们也可以使用singleton模式。
这个模式易于理解,但是在java中使用起来,涉及到对象、内存、线程这些概念,很容易犯错误,必须小心。
而且有时候singleton并不一定是你想象的那样就是singleton,你可以参见
Prototype模式
生成对象是一个复杂的过程,需要代价,但是利用原型模式就没这么复杂了,可以重用原先的生成过程,
即只要拷贝已生成的对象就可以了。
Builder模式
有时候创建一个复杂对象很麻烦,比如造汽车,要做方向盘、轮子、车身。而方向盘、轮子等的制造过程也不
简单。如果把造一个汽车的过程细化到所有零件的制造的话,不仅让人感觉到它的复杂难用,而且制造过程很难让
人分清汽车本身的结构。Builder模式把制造复杂对象的过程进行了解耦,把复杂对象的创建和部件的创建分别开
来,复杂对象的创建仅成为装配部件,这不仅使得创建过程变得简单清析,也使得创建的部件可以被重用,更有利
于测试与定位创建过程出现的问题。