面向对象的编程中经常会用到设计模式,而其中的策略模式(Strategy)使用算是最频繁的模式之一,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面将用一个简单的小实例来谈谈策略模式(Strategy)是怎么实现的。
两个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
分享到:
相关推荐
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
【Java设计模式】(2)策略模式Strategy
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
走进设计模式之 策略模式(Strategy) 代码
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。...
设计模式C++学习之策略模式(Strategy)
策略模式(strategy model)入门级小实例一个。
设计模式 策略模式。金典模式之策略模式代码。
strategy策略模式源码 策略模式源码 策略模式源码 策略模式源码
2009-03-9 策略模式Strategy:当解决一个问题的途径(策略)有很多种的时候,每一种处理方式都可以做为一种处理策略,通过管理类来切换调用不同的策略。
这种设计模式比较常用,希望能够帮助到大家。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each ...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式
策略模式思想简单实现,初学者可看看。 设计模式 策略模式 Strategy
C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式
一个把数组导出为表格的算法,输入一个数组,导出一个表格,当用户想改变导出的表格时,便可以通过改变输出的算法改变输出的结果。如果输出的内容用以网页显示,则输出 <table><tr><td>Jack</td></tr><tr><td>Maya...
在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
这份文档讲诉了设计模式之策略(Strategy)模式,希望可以帮助学习的人!
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
主要介绍了C#策略模式(Strategy Pattern),以一个简单的实例讲述了C#策略模式的实现方法,包括策略模式的用途以及具体实现方法,需要的朋友可以参考下