java策略模式应用场景,java 策略
00-1010 1.基本介绍2。传统方式3。采用战略模式4。策略模式的注意事项和细节
00-1010 1)在策略模式中,算法族(策略组)被单独定义和封装,以便它们可以相互替换。这种模式使得算法的改变独立于使用算法的客户。
2)该算法体现了几个设计原则。首先,把变化的代码和不变的代码分开;其次,为接口而不是特定类编程(定义策略接口);第三,多使用组合/聚合,少使用继承(客户通过组合使用策略)。
比如针对环保节能,提出了三种节能方式:基带板节能、SPC节能、产品节能,不同的节能方式,针对环保设备的不同具体处理流程。
00-1010 (1)类图
(2)编码实现
1)定义一个EsPolicy抽象类和esPolicyHandler方法。
公共抽象类e policy { public void espolicy handler(){ } 2)bbes policy继承e policy并重写e policy handler方法。
Class BBespolicy扩展es策略{ @ override public void espolicy handler(){ system . out . println(==基带板节能策略==);}}3)SpcEsPolicy继承EsPolicy并重写esPolicyHandler方法。
Class spces policy扩展es policy { @ override public void espolicy handler(){ system . out . println(==SPC节能策略处理==);}}4)ProdEsPolicy继承EsPolicy并覆盖esPolicyHandler方法。
Class prodespolicy扩展es策略{ @ override public void espolicy handler(){ system . out . println(==产品节能策略处理==);}}5)测试
public class EsPolicy test { public static void main(String[]args){ EsPolicy bbes policy=new bbes policy();bbes policy . espolicyhandler();spces policy spces policy=new spces policy();spces policy . espolicy handler();prod espolicy prod policy=new prod espolicy();prod policy . espolicy handler();}}执行结果
===处理基带板节能策略=======Spc节能策略处理=====产品节能策略处理==
问题:传统的方法是通过子类继承父类,复制父类的方法来实现不同子类的不同行为。对类,尤其是超类的局部改变,会影响到其他部分,产生溢出效应。
00-1010 (1)类图
(2)编码实现
1)定义策略接口,定义抽象方法。
公共接口espolicy handler { void espolicy handler();}2)BbEsPolicyHandler实现策略接口和EsPolicyHandler方法。
类public bberpolycyhandler实现espolicyhandler { @ override public void espolicyhandler(){ system . out . println(==基带板节能策略处理==);}}
re>3)SpcEsPolicyHandler实现策略接口,并实现esPolicyHandler方法
public class SpcEsPolicyHandler implements EsPolicyHandler { @Override public void esPolicyHandler() { System.out.println("===Spc节能策略处理==="); }}
4)ProdEsPolicyHandler实现策略接口,并实现esPolicyHandler方法
public class ProdEsPolicyHandler implements EsPolicyHandler { @Override public void esPolicyHandler() { System.out.println("===产品节能策略处理==="); }}
5)定义EsPolicy抽象类,注入EsPolicyHandler作为其属性
public abstract class EsPolicy { EsPolicyHandler esPolicyHandler; public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) { this.esPolicyHandler = esPolicyHandler; } public void esPolicyHandler() { if (null != esPolicyHandler) { esPolicyHandler.esPolicyHandler(); } }}
6)BbEsPolicy继承EsPolicy,在构造方法中实例化esPolicyHandler接口属性
public class BbEsPolicy extends EsPolicy { public BbEsPolicy() { esPolicyHandler = new BbEsPolicyHandler(); }}
7)SpcEsPolicy继承EsPolicy,在构造方法中实例化esPolicyHandler接口属性
public class SpcEsPolicy extends EsPolicy { public SpcEsPolicy() { esPolicyHandler = new SpcEsPolicyHandler(); }}
8)ProdEsPolicy继承EsPolicy,在构造方法中实例化esPolicyHandler接口属性
public class ProdEsPolicy extends EsPolicy { public ProdEsPolicy() { esPolicyHandler = new ProdEsPolicyHandler(); }}
9)测试
public class EsPolicyTest { public static void main(String[] args) { BbEsPolicy bbEsPolicy = new BbEsPolicy(); bbEsPolicy.esPolicyHandler(); SpcEsPolicy spcEsPolicy = new SpcEsPolicy(); spcEsPolicy.esPolicyHandler(); ProdEsPolicy prodEsPolicy = new ProdEsPolicy(); prodEsPolicy.esPolicyHandler(); }}
10)执行结果
===处理基带板节能策略======Spc节能策略处理======产品节能策略处理===
4.策略模式的注意事项和细节
1)策略模式的关键是:分析项目中变化部分与不变部分
2)策略模式的核心思想是:多用组合/聚合,少用继承;用行为类组合,而不是行为的继承,更有弹性;
3)体现了对修改关闭,对扩展开放原则,客户端增加行为而不用修改原有的代码,只要添加一种策略(或者行为)即可,避免了使用多重转移语句(if…else if…else)
4)提供了可以替换继承关系的办法:策略模式将算法封装在独立的Strategy类中使得你可以独立于其Context改变它,使它易于切换、易于理解、易于扩展
5)需要注意的是:每添加一个策略就要增加一个类,当策略过多是会导致类数量庞大
到此这篇关于Java设计模式之策略模式示例详解的文章就介绍到这了,更多相关Java策略模式内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。