`

设计模式:策略模式

 
阅读更多

策略模式在集合类的Comparator中大量应用

策略模式也强调了一个设计原则:多使用组合,少用继承。

策略模式就是使用变量来强调“多使用组合”

下面定义一个使用策略模式来实现加减乘除

 

package com.test.strategy;
/**
 * 抽象策略角色
 *
 */
public interface Strategy {
	public int calculate(int a,int b);
}

上面定义了一个抽象策略角色,其中定义了一个caculate方法 。

 

package com.test.strategy;

/**
 * 具体策略角色
 *
 */
public class AddStrategy implements Strategy {

	public int calculate(int a, int b) {
		return a + b;
	}

}

 

package com.test.strategy;

/**
 * 具体策略角色
 */
public class SubtractStrategy implements Strategy {

	public int calculate(int a, int b) {
		return a - b;
	}

}

 

 

package com.test.strategy;

/**
 * 具体策略角色
 */
public class MultiplyStrategy implements Strategy {

	public int calculate(int a, int b) {
		return a * b;
	}

}

 

 

package com.test.strategy;

/**
 * 具体策略角色
 */
public class DivideStrategy implements Strategy {
	
	public int calculate(int a, int b) {
		return a / b;
	}

}

 

上面定义了四个具体策略解决,实现了抽象策略角色接口,并实现了相应的方法,用来做加减乘除。

package com.test.strategy;

//环境角色
public class Enviroment {
	private Strategy strategy;

	public Enviroment(Strategy strategy) {
		this.strategy = strategy;
	}

	public Strategy getStrategy() {
		return strategy;
	}

	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public int caculate(int a,int b){
		return strategy.calculate(a, b);
	}
}

 

环境类用来维护及调用策略类。

package com.test.strategy;

public class Client {
	public static void main(String[] args) {
		//加法
		AddStrategy addStrategy = new AddStrategy();
		Enviroment enviroment = new Enviroment(addStrategy);
		System.out.println(enviroment.caculate(3, 4));
		//减法
		SubtractStrategy subtractStrategy = new SubtractStrategy();
		enviroment = new Enviroment(subtractStrategy);
		System.out.println(enviroment.caculate(3, 4));
		//乘法
		MultiplyStrategy multiplyStrategy = new MultiplyStrategy();
		enviroment = new Enviroment(multiplyStrategy);
		System.out.println(enviroment.caculate(3, 4));
		//除法
		DivideStrategy divideStrategy = new DivideStrategy();
		enviroment = new Enviroment(divideStrategy);
		System.out.println(enviroment.caculate(3, 4));
	}
}

 

具体的客户端调用。

 

再看一个例子:

分享到:
评论

相关推荐

    设计模式:策略模式c++代码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,当一个系统需要在不同时间执行不同的算法,或者当一个对象的行为需要随着它的内部状态或外部条件的变化而变化时,策略模式就能派上用场...

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...

    《设计模式:可复用面向对象软件的基础》英文版

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

    设计模式:基于C#的工程化实现及扩展(完整电子版)

    本书全面地介绍了多种经典的设计模式,并结合C#的实际应用,提供了详尽的工程化实现和扩展策略。 首先,我们要理解设计模式的基本概念。设计模式不是预定义的代码库,而是一种经验总结,是对软件设计中常见问题的...

    设计模式:可复用面向对象软件的基础--详细书签版

    2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 monoglyph 30 2.4.3 decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 abstract ...

    java设计模式之策略模式与模板模式

    本篇文章将深入探讨两种重要的设计模式:策略模式和模板模式。通过理解这两种模式,开发者可以更好地组织代码,提高代码的灵活性和可扩展性。 ### 策略模式 策略模式是一种行为设计模式,它使你能在运行时改变对象...

    设计模式:可复用的面向对象软件的基础

    - 策略模式:在AI算法中,根据不同游戏环境和规则动态更换行为策略; - 观察者模式:在事件驱动的游戏中,实现不同游戏对象之间的通信和响应; - 组合模式:在场景图中表示对象和子对象,实现一致的处理方式; - ...

    设计模式:可复用面向对象软件设计基础(附源码)

    3. **行为型模式**:包括责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式主要处理对象之间的交互和职责分配。 例如,单例模式...

    java实验:策略模式、观察者模式和组合模式.doc

    实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可扩展性和可维护性。 1. **策略模式**:策略模式...

    1.《设计模式:可复用面向对象软件的基础(完整书签)》

    总的来说,《设计模式:可复用面向对象软件的基础》是一本深入理解和应用面向对象设计的必备书籍,它不仅介绍了23种核心设计模式,还提供了大量实例和解释,帮助读者将理论知识转化为实际的编程技巧。通过对这本书的...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    策略模式工厂方法模式观察者模式

    本资源主要涵盖了三种经典的设计模式:策略模式、工厂方法模式以及观察者模式,对于初学者来说是非常有价值的学习资料。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的...

    设计模式-策略者

    在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...

    详解设计模式

    在本文中,我们将深入探讨两个关键的设计模式:策略模式和装饰者模式,并结合生活中的实例来帮助理解它们。 首先,让我们来了解策略模式。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在日常生活...

    Java 经典设计模式讲解以及项目实战

    3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+...

    设计模式_基于C#的工程化实现及扩展_源码

    《设计模式:基于C#的工程化实现及扩展》是一份深入探讨软件设计模式的宝贵资源,它提供了C#语言下的具体实现与扩展,旨在帮助开发者提升代码的可读性、可维护性和可复用性。这个压缩包包含了多个源码文件,分别命名...

    设计模式:简单工厂、方法工厂、抽象工厂、单例、原型、委派、模板、代理、策略

    9. **策略**:策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换,策略让算法独立于使用它的客户。 这些设计模式都是面向对象编程...

    模式设计之策略模式

    策略模式\第三个设计模式:策略模式 - leoyu - JavaEye技术网站.htm

    C#面向对象设计模式纵横谈(25):设计模式总结

    16. 策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 17. 命令模式:命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求、...

Global site tag (gtag.js) - Google Analytics