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

              HeadFirst中策略模式的定义:策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

              策略模式体现的设计原则:1.封装变化,把会变化的部分封装起来,让其他部分不受到影响。使代码更加有弹性。

                                                2.面向接口编程,而不是面向实现编程。更易于维护和扩展,更有条理。

              策略模式的典型应用:CRM的报价策略,GUI编程中布局管理器的底层架构等等。

              自己写的一个Demo(注释比较直接):

      

    package com.wxisme.strategy;
    
    /**
     * 策略接口,用来统一策略的具体实现
     * @author wxisme
     *
     */
    public interface Strategy {
    	public void action();
    }
    
    package com.wxisme.strategy;
    /**
     * 策略的上下文交互,用来封装策略。
     * @author wxisme
     *
     */
    public class Context {
    	Strategy strategy;
    	
    	public Context(Strategy strategy) {
    		this.strategy = strategy;
    	}
    	
    	public void setStrategy(Strategy strategy) {
    		this.strategy = strategy;
    	}
    	
    	public void executeAction() {
    		this.strategy.action();
    	}
    }
    
    package com.wxisme.strategy;
    /**
     * 策略的具体实现类
     * @author wxisme
     *
     */
    public class StrategyOne implements Strategy{
    	@Override
    	public void action() {
    		System.out.println("one action.");
    	}
    	
    }
    
    package com.wxisme.strategy;
    /**
     * 策略的具体实现类
     * @author wxisme
     *
     */
    public class StrategyTwo implements Strategy{
    	@Override
    	public void action() {
    		System.out.println("two action.");
    	}
    	
    }
    
    package com.wxisme.strategy;
    /**
     * 面向客户的客户端,只保留封装好的策略。没有具体的实现。
     * 应用:CRM的报价策略,GUI编程中布局管理器的底层架构
     * @author wxisme
     *
     */
    public class Client {
    
    	public static void main(String[] args) {
    		/**
    		 * 运用多态,面向接口编程,可维护可扩展。
    		 * 可以把new StrategyOne()改成任何一个实现类
    		 * 而不用修改其他任何代码。
    		 */
    		Strategy strategy = new StrategyOne();
    		//用上下文交互类封装策略接口,用户可以通过此交互类来调用任何一个策略。
    		Context c = new Context(strategy);
    		//调用执行方法就能实现不同的策略动作。
    		c.executeAction();
    	}
    
    }
    

            

  • 相关阅读:
    PostgreSQL中的partition-wise join
    Partition-wise join
    外观模式 门面模式 Facade 结构型 设计模式(十三)
    桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
    组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
    创建型设计模式对比总结 设计模式(八)
    原型模式 prototype 创建型 设计模式(七)
    单例模式 创建型 设计模式(六)
    建造者模式 生成器模式 创建型 设计模式(五)
    抽象工厂模式 创建型 设计模式(四)
  • 原文地址:https://www.cnblogs.com/wxisme/p/4497535.html
Copyright © 2011-2022 走看看