设计模式-001策略模式

策略模式又称为算法簇模式。在该模式下定义了不同的算法,算法间可以互相替换。所以在该模式下使用者可以自由的在算法间进行调换,也就是说可以动态的改变对象的行为。
设计原则:就是把一个类中经常改变或者将来可能会改变的部分提取出来,作为一个接口。
策略模式的优点,高内聚低耦合。还有就是扩展性,也就是OCP原则,策略可以持续增加下去而不用修改使用者部分(也就是算法的调用者)。

5,策略模式的经典示例:(有人说这是个状态模式,我只是个小白,在此不争执)

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开能解决棘手问题,嘿,还别说,真解决了大问题,搞到最后是周瑜陪了夫人又折兵,那咱们先看看这个场景是什么样子的。

先说说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊取出妙计,执行,然后获胜。用java程序怎么表现这些呢?
那我们先来看看图?
这里写图片描述
三个妙计是同一类型的东西,那咱就写个接口:

package com.yangguangfu.strategy;  
/** 
 *  
 * @author trygf521@126.com:阿福 
 * 首先定义一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口。 
 */  
public interface IStrategy {  
    //每个锦囊妙计都是一个可执行的算法。  
    public void operate();  

}  

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

妙计一:初到吴国:

package com.yangguangfu.strategy;  
/** 
 *  
 * @author trygf521@126.com:阿福 
 * 找乔国老帮忙,使孙权不能杀刘备。 
 */  
public class BackDoor implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备...");  
    }  

}  

妙计二:求吴国太开个绿灯,放行:
Java代码

package com.yangguangfu.strategy;  
/** 
 *  
 * @author trygf521@126.com:阿福 
 * 求吴国太开个绿灯。 
 */  
public class GivenGreenLight implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("求吴国太开个绿灯,放行!");  

    }  

} 

妙计三:孙夫人断后,挡住追兵:
Java代码

package com.yangguangfu.strategy;  
/** 
 *  
 * @author trygf521@126.com:阿福 
 * 孙夫人断后,挡住追兵。 
 */  
public class BlackEnemy implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("孙夫人断后,挡住追兵...");  

    }  

}  

好了,大家看看,三个妙计是有了,那需要有个地方放妙计啊,放锦囊里:

Java代码

package com.yangguangfu.strategy;  
/** 
 *  
 * @author trygf521@126.com:阿福 
 * 
 */  
public class Context {  

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

    public void operate(){  
        this.strategy.operate();  
    }  

}  

然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列,还想着娶纯情少女的,色咪咪的刘备老爷子去入赘了,嗨,还别说,亮哥的三个妙计还真不错,瞧瞧:
Java代码

package com.yangguangfu.strategy;  

public class ZhaoYun {  

    /** 
     * 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计 
     */  
    public static void main(String[] args) {  
        Context context;  

        //刚到吴国的时候拆开第一个  
        System.out.println("----------刚刚到吴国的时候拆开第一个---------------");  
        context = new Context(new BackDoor());  
        context.operate();//拆开执行  
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  

        //当刘备乐不思蜀时,拆开第二个  
        System.out.println("----------刘备乐不思蜀,拆第二个了---------------");  
        context = new Context(new GivenGreenLight());  
        context.operate();//拆开执行  
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  

        //孙权的小追兵了,咋办?拆开第三个锦囊  
        System.out.println("----------孙权的小追兵了,咋办?拆开第三个锦囊---------------");  
        context = new Context(new BlackEnemy());  
        context.operate();//拆开执行  
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
    }  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值