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("---------------------终了----------------------------------------------------");
    	
    	}
    }
    


  • 相关阅读:
    怎么在本地建立一个Maven 项目push到码云(https://git.oschina.net)
    SmartGit(试用期30后),个人继续使用的方法。
    小项目的总结
    Http 协议简略
    servlet 的基础学习
    安卓访问https错误,访问http可以,可能是nginx ssl证书配置有问题
    EF Code first主从表,删除更新从表
    MSSQL 生成唯一自增数据的办法
    select2插件placeholder不显示的问题
    FormData的Ajax提交注意事项
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7079378.html
Copyright © 2011-2022 走看看