zoukankan      html  css  js  c++  java
  • 策略模式

    策略模式定义了一系列的算法。并将每个算法封装起来。并且使它们还能够相互替换。

    策略模式让算法独立于使用它的客户而独立变化。

    —抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
    —详细策略角色:包装了相关的算法和行为。

    —环境角色:持有一个策略类的引用,终于给client调用。
    package mode.strategy;
    
    /**
     * @ClassName: IStrategy
     * @Description: 定义了一个策略接口。这是诸葛亮老人家给赵云的三个锦囊妙计的接口
     * @author mpc
     * @date 2014年12月31日 下午4:10:34
     * 
     */
    public interface IStrategy {
    	public void operate();
    }
    

    package mode.strategy;
    
    /** 
    * @ClassName: BackDoor 
    * @Description: 找乔国老帮忙,使孙权不能杀刘备
    * @author mpc 
    * @date 2014年12月31日 下午4:12:19 
    *  
    */
    public class BackDoor implements IStrategy {
    
    	@Override
    	public void operate() {
    		System.out.println("找乔国老帮忙。让吴国太给孙权施加压力,使孙权不能杀刘备。。。

    。。"); } }


    package mode.strategy;
    
    /** 
    * @ClassName: GivenGreenLight 
    * @Description: 求吴国太开个绿灯 
    * @author mpc 
    * @date 2014年12月31日 下午4:14:26 
    *  
    */
    public class GivenGreenLight implements IStrategy {
    
    	@Override
    	public void operate() {
    		System.out.println("求吴国太开绿灯,放行!");
    	}
    
    }

    package mode.strategy;
    
    public class BlackEnemy implements IStrategy {
    
    	@Override
    	public void operate() {
    		System.out.println("孙夫人断后。挡住追兵.........");
    	}
    
    }
    

    package mode.strategy;
    
    /**
     * 
     * 锦囊
     * 
     * */
    public class Context {
    	private IStrategy strategy;
    
    	// 构造函数,要使用带有哪个妙计的锦囊
    	public Context(IStrategy stragtegy) {
    		this.strategy = stragtegy;
    	}
    
    	public void operate() {
    		this.strategy.operate();
    	}
    }

    package mode.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("---------------第一步搞定--------------------------------");
    	
    		//刘备乐不思蜀的时候拆开第二个
    		System.out.println("--------------乐不思蜀了,拆开第二个-------------------------------");
    		context=new Context(new GivenGreenLight());
    		context.operate();
    		System.out.println("----------------第二步搞定---------------------------------------------");
    	
    		
    		//孙权的追兵到了。拆开第三个
    		System.out.println("---------------孙权的追兵到了,拆开第三个------------------------------------------------");
    		context = new Context(new BlackEnemy());
    		context.operate();
    		System.out.println("---------------------终了----------------------------------------------------");
    	
    	}
    }
    


  • 相关阅读:
    [题解](组合数/二位前缀和)luogu_P2822组合数问题
    [题解](tarjan割点/点双)luogu_P3225_矿场搭建
    [题解](树形dp/换根)小x游世界树
    [題解](DP)CF713C_Sonya and Problem Wihtout a Legend
    [題解]hdu_6412公共子序列
    [題解](最小生成樹)luogu_P2916安慰奶牛
    [题解](堆)luogu_P1631序列合并
    [题解](最短路)luogu_P5122 Fine Dining
    [题解](次短路)luogu_P2865路障(未)
    [题解](最短路(树))luogu_P5201_short cut
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7079378.html
Copyright © 2011-2022 走看看