概述
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式概述
策略模式属于对象的行为模式。
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。 策略模式使得算法可以在不影响到客户端的情况下发生变化。
该模式涉及到三个角色:
环境(Context)角色
抽象策略(Strategy)角色
具体策略(ConcreteStrategy)角色
源代码
环境角色类
package cn.tk.study.strategy2;
public class Context
{
private Strategy strategy;
public Context(Strategy strategy)
this.strategy = strategy;
}
public void setStrategy(Strategy strategy)
{
this.strategy = strategy;
}
public void operate()
{
strategy.operate();
}
}
抽象策略类
package cn.tk.study.strategy2;
public interface Strategy
{
public void operate();
}
具体策略类
package cn.tk.study.strategy2;
public class BackDoor implements Strategy
{
@Override
public void operate()
{
System.out.println("计策1!!!");
}
}
package cn.tk.study.strategy2;
public class BlackEnemy implements Strategy
{
@Override
public void operate()
{
System.out.println("计策3!!!");
}
}
package cn.tk.study.strategy2;
public class GivenGreenLight implements Strategy
{
@Override
public void operate()
{
System.out.println("计策2!!!");
}
}
测试类
package cn.tk.study.strategy2;
public class Invoke {
public static void main(String[] args) {
Context context;
context = new Context(new BackDoor());
context.operate();
System.out.println("\n");
context.setStrategy(new GivenGreenLight());
context.operate();
System.out.println("\n");
context.setStrategy(new BlackEnemy());
context.operate();
System.out.println("\n");
}
}
运行结果