您的位置:首页 > 编程语言 > Java开发

Headfirst java设计模式-策略模式

2018-08-06 10:25 26 查看

策略模式:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

代码实现:
(1)定义两个算法族(策略)的接口

public interface FlyBehavior {
void fly();
}

public interface QuackBehavior {
void quack();
}

(2)定义一个接口,采用组合的方式调用相应的算法族(策略)接口。

public abstract class Duck {
FlyBehavior flybehavior;
QuackBehavior quackbehavior;

public Duck(){

}

public void performFly(){
flybehavior.fly();
}

public void performQuack(){
quackbehavior.quack();
}

public void swim(){
System.out.println("All duck float, even decoys");
}

public void setFlyBehavior(FlyBehavior fb){
flybehavior = fb;
}

public void setQuackBehavior(QuackBehavior qb){
quackbehavior = qb;
}

}

(3)继承两个算法族(策略)接口,实现相应的实现类

public class FlyNoWay implements FlyBehavior{

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I can't fly.");
}
}

public class FlyRocketPowered implements FlyBehavior{

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I am fly with a rocket.");
}
}

public class FlyWithWings implements FlyBehavior{

@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("I'm flying.");
}
}

public class MuteQuack implements QuackBehavior{

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("<<Silence>>");
}
}

public class Quack implements QuackBehavior{

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Quack");
}
}

public class Squeak implements QuackBehavior{

@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("Squeak");
}
}

(4)继承duck接口,实现具体的duck类,实例化不同的算法族(策略)。

public class MallardDuck extends Duck {

public MallardDuck(){
quackbehavior = new Quack();
flybehavior = new FlyWithWings();
}
}

public class ModleDuck extends Duck {

public ModleDuck(){
flybehavior = new FlyNoWay();
quackbehavior = new Quack();
}

public void display(){
System.out.println("I am a modle Duck.");
}
}

(5)测试代码

public class MiniDuckSimulator {
public static void main(String[] args){
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();

Duck modle = new ModleDuck();
modle.performFly();
modle.setFlyBehavior(new FlyRocketPowered());
modle.performFly();
}
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: