设计原则:
一、封装变化
代码变化引起的不经意的后果变少,系统变得更有弹性
二、针对接口编程,而不是针对实现编程。
针对接口编程,关键在多态:程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为。变量的声明是一个抽象类或接口。
针对实现编程:
Dog d = new Dog();
d.bark();
针对接口编程:
Animal animal = new Dog();
animal.makeSound();//利用animal进行多态调用
子类实例化的动作不再需要在代码中硬编码,而是在运行时才制定具体实现的对象。
针对接口编程的文章:http://blog.chinaunix.net/uid-20478213-id-1942005.html
如何选择接口还是抽象类:
如果一个实体可以有多种实现方式,则在设计实体行为的描述方式时,应当达到这样一个目标:在使用实体的时候,无需详细了解实体行为的实现方式。行为模型应该总是通过接口而不是抽象类定义。
三、多用组合,少用继承
使用组合建立的系统有很大的弹性,不仅可以将算法簇封装成类,更可以在运行时动态地改变行为。
策略模式:
定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户