`
keeponmoving
  • 浏览: 112618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

策略模式(Strategy)实例分析与讲解

 
阅读更多

 

       面向对象的编程中经常会用到设计模式,而其中的策略模式(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  

 

 

 

 

 

 

 

4
5
分享到:
评论
3 楼 zhangdan_660 2012-04-04  
  一下就明白了
2 楼 keeponmoving 2012-03-30  
stormtoy 写道
很通俗

呵呵,这是我对策略模式一点浅显理解的表述,学习ing...
1 楼 stormtoy 2012-03-30  
很通俗

相关推荐

    [行为模式] head first 设计模式之策略模式(strategy)

    在`Head First 设计模式之策略模式`中,作者通过易于理解的方式讲解了如何在实际编程中应用策略模式。博客可能涵盖了以下内容: 1. **问题背景**:通常,当一个类有多种可能的行为,并且这些行为在不同场景下需要...

    这个demo主要讲解了开发模式中的策略模式.zip

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或策略来执行不同操作的情况。策略模式允许我们将算法封装到独立的可互换的策略对象中,从而使算法的...

    Java开发模式之策略模式

    `策略模式.exe`可能是相关的教学软件或演示程序,`策略模式.ppt`可能是包含详细讲解和案例分析的课件,而`StrategyDemo`可能是一个Java代码示例,演示了如何在实际项目中应用策略模式。 总结来说,策略模式是一种...

    《Head First设计模式》读书笔记 -- (第一章)策略模式

    第一章主要讲解的是策略模式,这是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式的核心思想是定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。 策略模式的...

    CBF4LIFE的《设计模式讲解JAVA》

    首先,书中介绍了策略模式(Strategy Pattern),这是一种行为设计模式,允许在运行时选择算法的行为。CBF4LIFE通过诸葛亮给赵云三个锦囊妙计的故事,形象地说明了策略模式的应用。在Java中,策略模式通常包括一个...

    我们的设计模式(java)

    书中首先介绍了策略模式(Strategy Pattern),这是行为设计模式之一。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。以诸葛亮给赵云三个锦囊妙计的...

    中文版_源码设计模式解析与实战.pdf

    4. **行为型模式**:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、责任链模式(Chain of ...

    设计模式相关文档和部分模式源代码

    行为型模式涉及对象间的职责分配,如观察者模式(Observer)、策略模式(Strategy)、命令模式(Command)以及模板方法模式(Template Method),这些模式让代码更具灵活性和可扩展性。 在C++中实现设计模式,需要...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    在刘伟教授的课程中,可能涉及了对这些模式的深入讲解和实例分析,而课后习题和模拟试题则旨在检验和巩固学员对设计模式的理解。解题过程中,可能会遇到如下关键知识点: 1. **模式的应用场景**:理解每个设计模式...

    吉大软件设计模式ppt、示例代码及平时作业

    还有策略模式(Strategy),允许在运行时选择算法或策略,增加了灵活性。 PPT讲解部分可能详细阐述了每种模式的定义、意图、结构、参与者、实现和实例。示例代码则有助于理解这些模式的实际应用,通过阅读和分析...

    java23种设计模式详解+源码(绝对详解)

    - 策略模式(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法的变化独立于使用它的客户。 - 模板方法模式(Template Method):在一个方法中定义一个算法的框架,而将一些步骤延迟...

    设计模式培训

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者...策略模式(Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    java设计模式PPT

    包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、备忘录模式(Memento)、状态模式...

    HeadFirst设计模式PPT

    行为型模式涉及对象之间的责任分配,包括模板方法模式(Template Method)、策略模式(Strategy)和观察者模式(Observer)。模板方法模式定义了一个操作中的算法骨架,允许子类在其间填充具体步骤;策略模式定义一...

    Java设计模式之禅

    1. 策略模式(Strategy Pattern):允许在运行时选择算法的行为,如书中提到的“锦囊妙计”例子,通过不同的策略应对不同的情形。 2. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问,常...

    C#设计模式(英文版)

    3. 行为型模式:包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、备忘录模式...

    设计模式那点事_软件小蜜

    行为型模式主要关注对象间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)和迭代器模式(Iterator)等。这些模式有助于处理算法的封装...

    您的设计模式

    1. 策略模式(Strategy Pattern) 策略模式定义了一组算法,将每个算法封装起来,并使它们可以互换。这种模式使得算法可以独立于使用它的客户端变化。在Java中,策略模式可以用来实现不同算法的灵活切换。 2. 代理...

    java与模式 光盘内容

    3. **行为型模式**:例如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、备忘录(Memento)、状态(State)、职责链(Chain of ...

Global site tag (gtag.js) - Google Analytics