StrategyPattern--策略模式java实现

1.原理参考博客:https://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html,此次咱们以三国诸葛亮给的锦囊妙计为例

2.Strenge接口,全部的策略都是实现它的方法;

package cn.xiaobo.Strenge;html

/**
 * 一个策略接口,内部只须要定义一个方法就行;实现由具体的子类实现;
 * @author Administrator
 *
 */
java

public interface Strenge {算法

     void operate();
}
ide

3.BackDoor 策略1找乔国老帮忙防止被周瑜杀害,

package cn.xiaobo.Strenge;this

/**
 * 策略1找乔国老帮忙防止被周瑜杀害;
 * @author Administrator
 *
 */
public class BackDoor implements Strenge{
spa

    @Override
    public void operate() {
        System.out.println("找乔国老帮忙");
        
    }
}
.net

4.策略2找乔国老开绿灯,放行

package cn.xiaobo.Strenge;htm

/**
 * 策略2找乔国老开绿灯,放行;
 * @author Administrator
 *
 */
public class GiveGreenLight implements Strenge{
对象

    @Override
    public void operate() {
        System.out.println("找乔国老开绿灯");
        
    }
}
blog

5.策略3让周瑜妹妹拦住追兵,逃出追杀

package cn.xiaobo.Strenge;

/**
 * 策略3让周瑜妹妹拦住追兵,逃出追杀;
 * @author Administrator
 *
 */
public class BlockEnemy implements Strenge{

    @Override
    public void operate() {
        System.out.println("让周瑜妹妹挡住追兵");
        
    }
}

6.将三个策略放入锦囊,只要将对应的策略取出便可

package cn.xiaobo.Strenge;

/**
 * 将三个策略放入锦囊,只要将对应的策略取出便可
 * @author Administrator
 *
 */

public class StrangeApp {
        private Strenge iStrenge;
        
        public StrangeApp(Strenge strenge) {
            // TODO Auto-generated constructor stub
            this.iStrenge=strenge;
        }
        public void operate(){
            this.iStrenge.operate();
        }

}

7.执行策略,赵云是策略的执行者,只须要将一个个的策略执行就能够

package cn.xiaobo.Strenge;

public class StrangeMain {

    /**
     * 赵云是策略的执行者,只须要将一个个的策略执行就能够;
     * @param args
     *
  
     */
    public static void main(String[] args) {
        //第一条策略
        BackDoor backDoor=new BackDoor();
        //第二条策略
        GiveGreenLight giveGreenLight=new GiveGreenLight();
        //第三条策略
        BlockEnemy blockEnemy=new BlockEnemy();
        
        System.out.println("刚到吴国");
        StrangeApp strange1=new StrangeApp(backDoor);
        strange1.operate();
        System.out.println("\n");
        
        System.out.println("乐不思蜀");
        StrangeApp strange2=new StrangeApp(giveGreenLight);
        strange2.operate();
        System.out.println("\n");
        
        System.out.println("媳妇断后");
        StrangeApp strange3=new StrangeApp(blockEnemy);
        strange3.operate();
        System.out.println("\n");
    }

}

8.优势与缺点

  * 优势      * 策略模式提供了管理相关的算法族的办法。      * 策略类的等级结构定义了一个算法或行为族。      * 恰当使用继承能够把公共的代码移到父类里面,从而避免代码重复      *      * 使用策略模式能够避免使用多重条件(if-else)语句。      * 多重条件语句不易维护,它把采起哪种算法或采起哪种行为的逻辑与算法或行为的逻辑混合在一块儿,      * 通通列在一个多重条件语句里面,比使用继承的办法还要原始和落后。      *      * 缺点      * 因为策略模式把每一个具体的策略实现都单独封装成为类,若是备选的策略不少的话,那么对象的数目就会很可观      *      * 客户端必须知道全部的策略类,并自行决定使用哪个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。      * 换言之,策略模式只适用于客户端知道算法或行为的状况

相关文章
相关标签/搜索