策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
多用组合,少用继承。
//将基础属性与动态属性分类开来
public abstract class Duck {
private FlyInterface flyInterface;
private BarkInterface barkInterface;
public abstract void swim();
public abstract void display();
public void performFly() {
flyInterface.fly();
}
public void performBark() {
barkInterface.bark();
}
public FlyInterface getFlyInterface() {
return flyInterface;
}
public void setFlyInterface(FlyInterface flyInterface) {
this.flyInterface = flyInterface;
}
public BarkInterface getBarkInterface() {
return barkInterface;
}
public void setBarkInterface(BarkInterface barkInterface) {
this.barkInterface = barkInterface;
}
}
//duck实现类
public class MyDuck extends Duck {
public void swim() {
System.out.println("i can swim.");
}
public void display() {
System.out.println("i am red.");
}
}
//鸭子叫接口
public interface BarkInterface {
public void bark();
}
//鸭子飞接口
public interface FlyInterface {
public void fly();
}
//鸭子飞实现类
public class FlyWithWings implements FlyInterface {
@Override
public void fly() {
System.out.println("i fly with wings.");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Duck myDuck = new MyDuck();
myDuck.setFlyInterface(new FlyWithWings());
myDuck.performFly();
}
}
//结果:
i fly with wings.
原文:http://www.cnblogs.com/fanguangdexiaoyuer/p/5787080.html