对于一些经常改变的行为,可以将此行为提取出来供使用类进行使用。
eg:设计模式书中所写鸭子行为例子
飞行接口
public interface FlyBehavior {
void fly();
}
叫喊接口
public interface QuckBehavior {
void quck();
}
飞实现类
public class FlyWithWings implements FlyBehavior{
@Override
public void fly() {
System.out.println("我会飞");
}
}
叫喊实现类
public class Squeak implements QuckBehavior{
@Override
public void quck() {
System.out.println("我不会大喊大叫");
}
}
鸭子类
public abstract class Duck {
FlyBehavior flyBehavior;
QuckBehavior quckBehavior;
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void performQuack() {
quckBehavior.quck();
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuckBehavior(QuckBehavior quckBehavior) {
this.quckBehavior = quckBehavior;
}
}
鸭子实现类
public class ModelDuck extends Duck{
public ModelDuck() {
flyBehavior = new FlyWithWings();
quckBehavior = new Squeak();
}
@Override
public void display() {
System.out.println("我是模型");
}
}
测试类
public class TestDuck {
public static void main(String[] args) {
Duck modelDuck = new ModelDuck();
modelDuck.performFly();
modelDuck.performQuack();
}
}