先来个类图感受下策略模式
LPL是一个接口,RNG,EDG,IG是这个接口的实现类,可以看成3个不同的策略
S8是LPL的持有类
ContextMain是Main函数,测试使用S8调用3个不同的策略
策略模式体现了高内聚低耦合的特性
其实仔细观察可以发现策略模式和代理模式有点类似,只不过代理模式是代理执行,对外暴露的是代理。
策略模式的代码:
//接口
public interface LPL {
//lpl队伍出场
void comeOnStage();
}
public class RNG implements LPL{
@Override
public void comeOnStage() {
System.out.println("RNG LPL一号种子,RNG牛逼!");
}
}
public class EDG implements LPL {
@Override
public void comeOnStage() {
System.out.println("EDG 777777777");
}
}
public class IG implements LPL{
@Override
public void comeOnStage() {
System.out.println("IG 上中代练,不送包赢");
}
}
//LPL对象持有者 (可以把持有的对象,看做策略,new不同的对象,即使用不同的策略)
public class S8 {
private LPL lpl;
public S8(LPL lpl){
this.lpl=lpl;
}
//队伍上场
public void comeOnStage(){
this.lpl.comeOnStage();
}
}
/**
* 比赛开始
*
* @author: wangmingxin1
* @create: 2018-10-29 16:00
**/
//测试类
public class ContestMain {
public static void main(String[] args){
S8 s ;
//RNG上场
s=new S8(new RNG());
s.comeOnStage();
System.out.println("虚空冠军队输了,呜呜呜");
//EDG上场
s=new S8(new EDG());
s.comeOnStage();
System.out.println("EDG也输了,厂长连上场的机会也没有");
//IG上场
s=new S8(new IG());
s.comeOnStage();
System.out.println("恭喜IG进入决赛,知道谁是老大哥了吗?");
}
}
上述代码可以理解成调用3个不同的策略。
运行效果:
说点什么
您将是第一位评论人!