策略模式(StrategyPattern)

根据《 Head First 设计模式(中文版) 》上的例子编写的代码


鸭子的抽象超类

package DesignPattern.Strategy;

public abstract class DuckAbstract {
    
    public DuckAbstract() {
    }
    
    public abstract void display(); //鸭子的继承类覆写
    
    public FlyBehaviorStrategy fly; //飞行行为接口
	
    public QuackBehaviorStrategy quack; //呱呱叫行为接口
    //调用飞行接口的方法
    public void perforFly() {
        fly.fly();
    }
    //调用呱呱叫接口的方法
    public void perforQuack() {
        quack.quack();
    }
	
    //在运行时改变鸭子的飞行方式
    public void setFly(FlyBehaviorStrategy fly) {
        this.fly = fly;
    }
    //在运行时改变鸭子的叫的方式
    public void setQuack(QuackBehaviorStrategy quack) {
        this.quack = quack;
    }
	
}

package DesignPattern.Strategy;

/**
 * @author admini
 * 飞行 行为 接口
 */
public interface FlyBehaviorStrategy {
	
	/**
	 * 飞行
	 */
	public void fly() ;
	
}
package DesignPattern.Strategy;

public class FlyBehaviorStrategyImpl implements FlyBehaviorStrategy {

	@Override
	public void fly() {
		System.out.println("进行普通飞行模式");
	}

}
package DesignPattern.Strategy;

public class FlyStuntBehaviorStrategyImpl implements FlyBehaviorStrategy {

	@Override
	public void fly() {
		System.out.println("进行表演特技飞行模式");
	}

}
package DesignPattern.Strategy;

/**
 * @author admini
 * 呱呱叫 行为 接口
 */
public interface QuackBehaviorStrategy {

	/**
	 * 呱呱叫
	 */
	public void quack() ;
	
}
package DesignPattern.Strategy;

public class QuackBehaviorStrategyImpl implements QuackBehaviorStrategy {

	@Override
	public void quack() {
		System.out.println("呱呱叫");    
	}
	
}
package DesignPattern.Strategy;

public class QuackMuteBehaviorStrategyImpl implements QuackBehaviorStrategy {

	@Override
	public void quack() {
		System.out.println("不会叫的");    
	}
	
}
鸭子继承超类

package DesignPattern.Strategy;

public class Duck extends DuckAbstract {

    public Duck() {
        fly = new FlyBehaviorStrategyImpl(); //默认为普通飞行模式
        quack = new QuackBehaviorStrategyImpl();//默认为呱呱叫
    }
    
    @Override
    public void display() {
        System.out.println("这是一只鸭子");
    }

}
绿头鸭继承超类

package DesignPattern.Strategy;

public class DuckMallard extends DuckAbstract {

    public DuckMallard() {
        fly = new FlyStuntBehaviorStrategyImpl(); //默认为特技飞行模式
        quack = new QuackMuteBehaviorStrategyImpl();//默认为不会叫的
    }
    
    @Override
    public void display() {
        System.out.println("这是一只绿头鸭");
    }

}
测试类

package DesignPattern;

import org.junit.Test;
import DesignPattern.Strategy.*;

public class DesignPatternTest {

    @Test
    public void strategyTest() {
        DuckAbstract du = new Duck();//普通鸭子
        du.display();
        du.perforFly();
        du.perforQuack();
        du.setFly(new FlyStuntBehaviorStrategyImpl());
        du.perforFly();
        
        System.out.println("######################################");
        
        DuckAbstract dm = new DuckMallard();//绿头鸭
        dm.display();
        dm.perforFly();
        dm.perforQuack();
        dm.setFly(new FlyBehaviorStrategyImpl());
        dm.perforFly();
        dm.setQuack(new QuackBehaviorStrategyImpl());
        dm.perforQuack();
        
    }
    
}
这是一只鸭子
进行普通飞行模式
呱呱叫
进行表演特技飞行模式
######################################
这是一只绿头鸭
进行表演特技飞行模式
不会叫的
进行普通飞行模式
呱呱叫










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值