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

            

  • 相关阅读:
    java内联函数
    jvm垃圾回收
    jvm内存管理
    java进程和线程的区别
    jvm
    简单易学的SSM(Spring+SpringMVC+MyBatis)整合
    Spring之声明式事务
    SpringMVC知识点小结
    Servlet之文件的上传与下载
    java使用字节流和字符流实现文件复制
  • 原文地址:https://www.cnblogs.com/wxisme/p/4497535.html
Copyright © 2011-2022 走看看