博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《JAVA与模式》之策略模式
阅读量:7121 次
发布时间:2019-06-28

本文共 1934 字,大约阅读时间需要 6 分钟。

策略模式的定义

  定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

  策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。

策略模式的组成

  抽象策略角色:策略类,通常由一个接口或者抽象类实现。

  具体策略角色:包装了相关的算法和行为。

  环境角色:持有一个策略类的引用,最终给客户端用的。


一个简单的例子

1 public class Strategy { 2      3      4     public static void main(String[] args) { 5          6         IStrategy iStrategy =new StrategyB(); 7         Context context =new Context(iStrategy); 8         context.doStrategy(); 9     }10 11 }12 13 14 15 class Context{16     17     private IStrategy iStrategy;18     19     public Context(IStrategy iStrategy){20         21         this.iStrategy=iStrategy;22     }23     24     25     public void doStrategy(){26         27         iStrategy.say();28         29     }30     31 }32 33 34 interface  IStrategy{35     36     public void say();37     38 }39 40 class StrategyA implements IStrategy{41 42     @Override43     public void say() {44         System.out.println("StrategyA");45     }46 }47 class StrategyB implements IStrategy{48     49     @Override50     public void say() {51         System.out.println("StrategyB");52     }53 }54 class StrategyC implements IStrategy{55     56     @Override57     public void say() {58         System.out.println("StrategyC");59     }60 }

拓展联想:如何设计一个计算器 包含加减乘除四个策略

策略模式的缺点:客户端必须知道有多少个可用策略,每一个策略都要创建一个对象,可使用工厂模式来解决

策略模式与状态模式的区别

1.状态模式之间的实现类是互斥的,而对策模式则是并行的

2.策略模式是由客户端来控制具体使用哪个策略

  而状态模式是需要通过state或则context自身来做判断管理的

策略模式配合工厂模式解决If else 过多的问题

StateFactory.javastatic Map
states = new HashMap
();static{ states.put("A",ConcreteStateA.class); states.put("B",ConcreteStateB.class);}public static State createState(String key){ return (State)states.get(key).newInstance();}//调用StateFactory.createState(state).handle();

参考:

http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html

http://www.cnblogs.com/mengdd/archive/2013/01/19/2867443.html

http://yangguangfu.iteye.com/blog/815107

http://www.iteye.com/topic/1112645?page=1

 

 

 

你可能感兴趣的文章
MyBatis insert操作插入,返回主键from官方
查看>>
XML约束——Schema约束
查看>>
NuGet的安装;
查看>>
[LeetCode] Search for a Range
查看>>
ubuntu workbench
查看>>
pselect 和 select
查看>>
CoffeeScript简介 <一>
查看>>
jQuery Easy UI Panel(面板)组件
查看>>
SharePoint2010升级到SharePoint2013操作手册
查看>>
WebService到底是什么?
查看>>
C++ 著名程序库 概览
查看>>
kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
查看>>
springmvc返回值、数据写到页面、表单提交、ajax、重定向
查看>>
制作可以 SSH 登录的 Docker 镜像
查看>>
PHP
查看>>
struts2 helloworld
查看>>
http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/
查看>>
王垠:对博士学位说永别
查看>>
本来连学计算机的都不是,怎么却读了计算机研究生
查看>>
LeetCode-326. Power of Three
查看>>