对策略模式的理解
来源:互联网 发布:ip的端口是否打开 编辑:程序博客网 时间:2024/04/30 21:23
1.策略模式的简单定义:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。
2.策略模式的三个角色:
- 策略:策略是一个接口,可以定义若干个抽象方法。
- 具体策略:具体策略是实现策略接口的类,重写接口所定义的方法并且给出方法体的具体内容。
- 上下文:上下文是依赖策略接口的类,即上下文包含有策略声明的变量。上下文中提供一个方法,该方法委托策略变量调用具体策略所重写的策略接口中的方法。
3.策略模式的UML类图:
4.策略模式的一个简单例子:,
用两种方法输出英文字母表:
比如:一种策略的输出格式为:A,a,B,b.......Z,z
另一种策略的输出格式为:A,B,C....Z,a,b,....z
用java代码实现如下:
(1)策略:
public interface Strategy {//策略接口public abstract void string();}
(2)具体策略:
具体策略1:
public class StrategyOne implements Strategy{//具体策略1public void string(){//重写策略接口所定义的抽象方法for( char ch='A'; ch<='Z'; ch++){System.out.printf("%c,%c,",ch,ch+32);}}}
具体策略2:
public class StrategyTwo implements Strategy{//具体策略2public void string(){//重写策略接口所定义的抽象方法for( char ch='A'; ch<='Z'; ch++){System.out.printf("%c,",ch);}for( char ch='a'; ch<='z'; ch++){System.out.printf("%c,",ch);}}}
(3)上下文:
public class Context {//上下文Strategy strategy;// 策略声明的变量public void setStrategy(Strategy strategy){this.strategy = strategy;//设置具体是哪一个的策略}public void outString(){strategy.string();//利用策略变量调用具体策略所重写的策略接口中的方法String()}}
(4)模式的使用:
public class Application {public static void main(String args[]){Context str = new Context();//声明上下文变量str.setStrategy(new StrategyOne());//设置具体策略str.outString();System.out.println();str.setStrategy(new StrategyTwo());str.outString();}}
(5)程序运行结果:
A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s,T,t,U,u,V,v,W,w,X,x,Y,y,Z,z,
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,
这是我自己经过理解后,用非常简单的一个例子来说明了一下策略模式的使用方法,希望对于大家学习有所帮助,有什么不妥还请指正!!!
- 对策略模式的理解
- 对策略模式的理解
- 我对策略模式的理解
- 逻辑层对策略模式的使用
- 黑马程序员:我对策略模式(Strategy Pattern)的理解
- 从头认识设计模式-策略模式-07-对策略模式的总结
- 曲成义:信息安全的理解和全局对策
- 浅谈设计模式中策略模式的概念
- [书目20081126]转型:用对策略,做对事
- 设计模式略谈
- Android中策略模式
- 安卓常用的设计模式略解(1)
- SQL注入的对策
- 遇到问题的对策
- Java中策略设计模式
- Java中策略模式介绍
- 总结java中的类名对于理解程序的干扰和对策:
- Atitit. 状态模式(State)attilax 总结 跟个策 略模式的区别
- 系统各种跳转
- linux_adb命令相关
- Android Develop Training——创建你的第一个android应用程序(Building Your First App)
- 为什么要学c语言
- ACM之java
- 对策略模式的理解
- iOS笔记三:strong、weak等详解
- Mosquitto简要教程(安装/使用/测试)
- Java基础<十四>_网络编程
- android_Ams简介
- java中的JDBC
- VC++视频采集的步骤
- Linux I2C核心、总线与设备驱动(一)
- 数组中出现次数超过一半的数字 MoreThanHalfNum