下面通过一个小例子来讲一下策略模式
接口类:
在该接口中定义了operator抽象方法
public interface Strategy {
public void operate();
}
沙和尚所拥有的方法
public class firstMethod implements Strategy{
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("haha 看我放大招");
}
}
猪八戒拥有的大招
public class SecondMethod implements Strategy{
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("小子,看我出招");
}
}
孙悟空拥有的大招
public class ThreeMehod implements Strategy{
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("我的最后一张王牌乐,用不上就没有办法了");
}
}
存放这些大招的类
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void operater(){
this.strategy.operate();
}
}
测试类,也就是唐僧要使用这些武器了
public class 唐僧出场 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义唐僧手中的法宝
Context context ;
System.out.println("这时妖怪来了,唐僧使出了身边的第一件法宝");
context = new Context(new firstMethod());
System.out.println("沙和尚出境,此时大喊一声,妖怪受死吧");
context.operater();
System.out.println("结果沙和尚不争气,被妖怪收了");
System.out.println("于是乎,唐僧是出了第二道利器,猪八戒");
context = new Context(new SecondMethod());
System.out.println("猪八戒扛着耙子出境了");
context.operater();
System.out.println("结果八戒也不争气,被妖怪收了");
System.out.println("此时唐僧有点撑不住了");
context = new Context(new ThreeMehod());
context.operater();
System.out.println("结果三人都被抓了,这个故事告诉我们,平时写代码要低耦合,便于观世音继承Strategy接口使用operator来降妖");
}
/**
这时妖怪来了,唐僧使出了身边的第一件法宝
沙和尚出境,此时大喊一声,妖怪受死吧
haha 看我放大招
结果沙和尚不争气,被妖怪收了
于是乎,唐僧是出了第二道利器,猪八戒
猪八戒扛着耙子出境了
小子,看我出招
结果八戒也不争气,被妖怪收了
此时唐僧有点撑不住了
我的最后一张王牌乐,用不上就没有办法了
结果三人都被抓了,这个故事告诉我们,平时要低耦合,便于观世音继承Strategy接口使用operator来降妖,
*/
}
上面就策略模式,比较简单但是比较实用适用于: