设计原则一:找出应用中可能需要变化的部分,把它们独立出来,不要和不需要变化的代码混在一起。
???????? 当我们的需求改变时,需要修改某一部分的代码,可以将这一部分的代码抽取出来,如果以后再次发生变化,可以只修改抽取出来的代码,而不必修改其他的代码。
设计原则二:针对接口编程,而不是针对实现编程。
??????? 利用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();
}
}
?
原文:http://lwbbupt.iteye.com/blog/2156672