设计模式——策略模式
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(); } }
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。