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

            

  • 相关阅读:
    Nginx配置SSL证书实现https访问及端口映射
    Nginx动静分离实现
    Nginx+Keepalived实现高可用部署
    Linux环境Nginx反向代理实现负载均衡
    Linux环境Nginx安装
    merlin矿池被攻击详情
    CVE-2021-26855 Exchange Server RCE
    C语言博客作业04--数组
    第四次作业
    SpringBoot集成多数据源-----基于数据库维护
  • 原文地址:https://www.cnblogs.com/wxisme/p/4497535.html
Copyright © 2011-2022 走看看