原文 http://www.cnblogs.com/changhai-xuri/archive/2006/11/24/571089.html
使用模式最好的方式是:「把模式装进脑子中,然后在你的设计和已有的应用中,寻找何处
可以使用这些模式。」以往是代码复用,那么现在则是经验复用。
第一个设计原则:
找出应用中可能需要变化之处,把它们独立出来, 不要和那些不需要变化的代码混在一起。
也就是说: 如果每次新的需求一来, 都会变化到某方面的代码, 那么你就可以确定, 这部分的代码需要被抽出来, 和其他闻风不动的代码有所区隔。
把会变化的部分取出并封装起来,以便以后可以轻易地扩充此部分,而不影响不需要变化的其他部分。这样的概念很简单,几乎是每个设计模式背后的精神所在。
所有的模式都提供了一套方法让「系统中的某部分改变不会影响其他部分」。
这样的结果如何?代码变化之后,出其不意的部分变得很少,系统变得更有弹性。
第二个设计原则:
「针对接口编程」真正的意思是「针对超类型(supertype)编程」。
这里所谓的「接口」有多个含意,接口是一个「概念」,也是一种Java的interface构造。你可以在不涉及Java interface的情况下,「针对接口编程」,关键就在多态。
利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。
「针对超类型编程」这句话,可以更明确地说成变量的声明类型,应该是超类型,通常是一个抽象类或者是一个接口,
如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量;这也意味着,声明类时,不用理会以后执行
时的真正对象类型!
第三个设计原则
多用组合,少用继承。
在设计时你会发现,对象的一些行为往往易于改变,采用继承时,超类的形为特性的改变会涉及到的有子类的改变,扩展性变得不够好,
按第一原则把这些易于变化的行为抽取出来,按第二原则采用接口来管理每一类形为,让具体的形为类去继承这些接口,
每一种形为之间不再有关系,对于主体类涉及到哪些形为,我们就把它们组合到一起好了。这样通过组合建立起来的系统具有很大的弹性,
我们就可以在运行时动态地改变行为,只要组合的行为对象,符合正确的接口标准即可。