Welcome everyone

什么是策略模式

设计模式 汪明鑫 855浏览 0评论

先来个类图感受下策略模式

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个不同的策略。

 

运行效果:

转载请注明:汪明鑫的个人博客 » 什么是策略模式

喜欢 (1)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz