策略模式属于对象的行为模式。
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式的结构
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
package 设计模式;
//************************主测试类***********************
public class StrategyTest {
public static void main(String[] args) {
Duck duck=new BlackDuck("小黑");
duck.setFly(new FlyImpl());
duck.fly();
Duck noduck=new ModekDuck("小白");
noduck.setFly(new NotFlyImpl());
noduck.fly();
}
}
//***********************
interface Flyavle{
public void flay();
}
class FlyImpl implements Flyavle{
@Override
public void flay() {
// TODO Auto-generated method stub
System.out.println("我飞的老高了!");
}
}
class NotFlyImpl implements Flyavle{
@Override
public void flay() {
// TODO Auto-generated method stub
System.out.println("我不会飞!");
}
}
abstract class Duck{
public String name;
private Flyavle fly;
public void setFly(Flyavle fly) {
this.fly=fly;
}
public Duck(String name) {
this.name=name;
}
public void fly() {
System.out.println(name+":");
fly.flay();
}
}
//真黑鸭子
class BlackDuck extends Duck{
public BlackDuck(String name) {
super(name);
// TODO Auto-generated constructor stub
}
}
//模型鸭子
class ModekDuck extends Duck{
public ModekDuck(String name) {
super(name);
// TODO Auto-generated constructor stub
}
}
//***********************