设计原则一:找出应用中可能需要变化的部分,把它们独立出来,不要和不需要变化的代码混在一起。
当我们的需求改变时,需要修改某一部分的代码,可以将这一部分的代码抽取出来,如果以后再次发生变化,可以只修改抽取出来的代码,而不必修改其他的代码。
设计原则二:针对接口编程,而不是针对实现编程。
利用java中多态的特性,针对超类型的编程,而不必关心具体执行时真正对象的类型。
设计原则三:为了交互对象之间的松耦合设计而努力。
松耦合设计,指我们在需要修改一些模块时,不会对其他模块产生影响。
设计原则四:类应该对扩展开发,对修改关闭
设计原则五:最少知识原则,不要让太多类耦合在一起
就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:该对象本身的方法;被当做方法的参数传递进来的对象;此方法所创建或实例化的任何对象;对象的任何组件。
eg:
/**
* Created by lwb on 2014/11/16.
*/
public abstract class Duck {
FlyBehavior flyBehavior;
public void fly() {
flyBehavior.fly();
} //针对接口编程,并不关心具体的实现类。同时将需求中需要变化的代码抽离了出去。
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void swim(){
System.out.println("All ducks can swim...");
}
}
public class MallardDuck extends Duck {
}
public interface FlyBehavior {
public void fly();
}
public class FlyWithWings implements FlyBehavior{
@Override
public void fly() {
System.out.println("I'm flying...");
}
}
public class Cannotfly implements FlyBehavior {
@Override
public void fly() {
System.out.println("I cannot fly...");
}
}
public class MiniDuckSimulator {
public static void main(String[] args) {
MallardDuck mallardDuck = new MallardDuck();
mallardDuck.setFlyBehavior(new FlyWithWings());//动态的指定飞行的方式
mallardDuck.fly();
mallardDuck.swim();
}
}