策略模式(Strategy)实例分析与讲解
2013-03-07 10:21
295 查看
面向对象的编程中经常会用到设计模式,而其中的策略模式(Strategy)使用算是最频繁的模式之一,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面将用一个简单的小实例来谈谈策略模式(Strategy)是怎么实现的。
两个int类型的整数可有多重操作方式,例如相加、相减、相乘等,我们可以写出这些算法的实现并且封装起来,以备在需要的时候选择我们想要的实现,从而满足我们的程序设计要求,首先,定义一个接口:
在这个接口的基础上,我写了三种实现,如下:
其一,加法算法时候的实现,
其二,减法算法的实现
其三,乘法算法的实现
如下就要写一个我们使用的环境了,下面给出了一个定义操作两个int整数的类,这个类中很重要的一个属性就是ICalculate,它是一个接口类型,因为我们对接口做了不同的实现,所以我们才能实现我们的目的,不同的需求使用不同的算法。
下面是一个客户端的调用类:
运行结果如下:
两个数相加算的时候结果:7
两个数相减算的时候结果:-1
两个数相减算的时候结果:12
两个int类型的整数可有多重操作方式,例如相加、相减、相乘等,我们可以写出这些算法的实现并且封装起来,以备在需要的时候选择我们想要的实现,从而满足我们的程序设计要求,首先,定义一个接口:
package com.dylan.model.pattern.strategy; public interface ICalculate { // 定义计算两个int数的方法,具体实现都不一样,可以实现两个int的相加、相减、相乘、相除等 public int calculateInt(int a, int b); }
在这个接口的基础上,我写了三种实现,如下:
其一,加法算法时候的实现,
package com.dylan.model.pattern.strategy; public class AddCalculate implements ICalculate { //接口ICalculate的加法算法的实现 @Override public int calculateInt(int a, int b) { return a+b; } }
其二,减法算法的实现
package com.dylan.model.pattern.strategy; public class SubtractCalculate implements ICalculate { // 接口ICalculate的减法算法实现 @Override public int calculateInt(int a, int b) { return a - b; } }
其三,乘法算法的实现
package com.dylan.model.pattern.strategy; public class MultiplyCalculate implements ICalculate { // 接口ICalculate的乘法实现 @Override public int calculateInt(int a, int b) { return a * b; } }
如下就要写一个我们使用的环境了,下面给出了一个定义操作两个int整数的类,这个类中很重要的一个属性就是ICalculate,它是一个接口类型,因为我们对接口做了不同的实现,所以我们才能实现我们的目的,不同的需求使用不同的算法。
package com.dylan.model.pattern.strategy; public class Int2Operate { private ICalculate iCalculate; public ICalculate getiCalculate() { return iCalculate; } public void setiCalculate(ICalculate iCalculate) { this.iCalculate = iCalculate; } // 定义个初始化的方法,参数为ICalculate类型的,然后通过传递参数进来以实现策略模式, // 这里也提现了多态的应用,接口有不同的实现类从而才能实现不同的算法来满足要求 public Int2Operate(ICalculate myCalculate) { this.iCalculate = myCalculate; } //操作两个数的方法,具体怎么操作的谁都不知道 public int calculateTest(int a, int b) { return iCalculate.calculateInt(a, b); } }
下面是一个客户端的调用类:
package com.dylan.model.pattern.strategy; public class ClientTest { /** * @param args * @author dylan 应用类,用来调试策略模式是怎么提现出来的 */ public static void main(String[] args) { //当要实现两个数相加算法的时候 Int2Operate i2p1 = new Int2Operate(new AddCalculate()); System.out.println("两个数相加算的时候结果:"+i2p1.calculateTest(3, 4)); //当要实现两个数相减算法的的时候 Int2Operate i2p2 = new Int2Operate(new SubtractCalculate()); System.out.println("两个数相减算的时候结果:"+i2p2.calculateTest(3, 4)); //当要实现两个数相乘算法的的时候 Int2Operate i2p3 = new Int2Operate(new MultiplyCalculate()); System.out.println("两个数相减算的时候结果:"+i2p3.calculateTest(3, 4)); } }
运行结果如下:
两个数相加算的时候结果:7
两个数相减算的时候结果:-1
两个数相减算的时候结果:12
相关文章推荐
- 系统分析设计实例讲解
- CSS中属性position位置详解功能讲解与实例分析
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (五)
- linux下 signal信号机制的透彻分析与各种实例讲解 1
- Oracle_AWR_报告分析实例讲解
- mysql5.6.7多实例安装、配置的详细讲解分析及shell启动脚本的编写
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解
- 实例讲解Java的多进程运行模式分析 --IT知道网(http://www.itwis.c...(转载)
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (六)
- linux下 signal信号机制的透彻分析与各种实例讲解 2
- 实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤 .
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (一)
- 深入php socket的讲解与实例分析
- 深入php socket的讲解与实例分析
- linux下 signal信号机制的透彻分析与各种实例讲解
- 分析DTD文档,写XML实例(简单;自我讲解)
- 用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (二)
- 历史最全分析ArrayList对象 什么是ArrayList? ArrayList实例讲解
- 实例讲解木马的分析方法