1、找出应用中可能需要变化之处,把它们独立出来,不要和那些需要变化的代码混在一起
如果每次新的需求一来,都会使某些方面的代码发生 变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区分。这个原则另一个思考方式:把会变化的部分取出并封装起来,以便以后可以轻易的改动或扩充此部分,而不影响不需要改变的其他部分。
2、针对接口编程、不针对实现编程
“针对接口编程”真正的意思是“针对超类型(supertype)”编程。“针对接口编程”,关键就在多态。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”这句话,可以更明确地说成“变量的声明类型应该是超类型”,通常是一个抽象类或是一个接口,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量。这也就意味着,声明类时不用理会以后执行时的真正对象类型。
3、多用组合、少用继承
"有一个"可能比“是一个”更好。“有一个”关系相当有趣:每一个鸭子都有一个FlyBehavior和一个QuackBehavior,好将飞行和呱呱叫委托给他们代为处理。当你将两个类组合起来使用,这就是“组合”。这种做法和“继承”不同的地方在于,鸭子的行为不是继承来的,而是和适当的行为对象“组合”来的。使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,更可以“在运行时动态的改变行为”,只要组合的行为对象符合正确的接口标准即可。