设计模式-策略模式

策略模式的例子:刘皇叔取老婆,军师三个锦囊,顺利娶回老婆
场景三要素:三个妙计、一个锦囊,一个赵云
赵云是一个干活的人,从锦囊取出妙计,执行
用JAVA程序表示,类图:
这里写图片描述
三个妙计是同一个类型的东西,那咱先写个接口:

/**
 * Created by xpeng on 2018/4/30.
 * 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
 */

public interface IStrategy {
    //每个锦囊妙计都是一个可执行的算法
    public void operate();
}

然后再写三个实现类,有三个妙计嘛:

/**
 * Created by xpeng on 2018/4/30.
 * 找乔国老帮忙,使孙权不能杀刘备
 */

public class BackDoor implements IStrategy {
    @Override
    public void operate() {
        Log.e("xyz"," 找乔国老帮忙,使孙权不能杀刘备 ");
    }
}
**
 * Created by xpeng on 2018/4/30.
 * 求吴国太开个绿灯
 */

public class GiveGreenLight implements IStrategy {
    @Override
    public void operate() {
        Log.e("xyz"," 求吴国太开个绿灯,放行 ");
    }
}
/**
 * Created by xpeng on 2018/4/30.
 * 孙夫人断后,挡住追兵
 */

public class BlockEnemy implements IStrategy {
    @Override
    public void operate() {
        Log.e("xyz"," 孙夫人断后,挡住追兵 ");
    }
}

好了,三个妙计有了,那需要放进锦囊啊:

/**
 * Created by xpeng on 2018/4/30.
 */

public class JinNang {
    //构造函数,你要使用那个妙计
    private IStrategy strategy;
    public  JinNang(IStrategy strategy){
        this.strategy = strategy;
    }

    //使用计谋了,看我出招了
    public void operate(){
        this.strategy.operate();
    }

}

好咯,最后就是赵云,我们云哥来执行咯,周郎妙计安天下,赔了夫人又折兵咯。

   JinNang jinNang;
        //刚刚到吴国的时候拆开第一个
        Log.e("xyz","刚刚到吴国的时候拆开第一个");
        jinNang = new JinNang(new BackDoor());
        jinNang.operate();//拆开执行

        //拆开第二个
        Log.e("xyz","老刘不想回去了");
        jinNang = new JinNang(new GiveGreenLight());
        jinNang.operate();

        //拆开第三个
        Log.e("xyz"," 孙小妹上 ");
        jinNang = new JinNang(new BlockEnemy());
        jinNang.operate();

        /**
         * 策略模式的好处:体现高内聚低耦合
         * 还有一个扩展性,也就是OCP原则,策略类可以继续增加下去
         */

策略模式的优点:体现高类聚低耦合的特性,具有扩展性,也就是OPC原则,这个例子中只要修改JinNang.java就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值