`

行为型设计模式--策略模式(Strategy)

阅读更多

策略模式(Strategy)


    定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

 

 

    抽象策略(Strategy)角色:策略类,通常由一个接口或者抽象类实现
    具体策略(ConcreteStrategyA)角色:包装了相关的算法和行为
    环境(Context)角色:持有一个策略类的引用,最终给客户端调用的。

// 抽象策略角色
public abstract class AbstractStrategy {
	public abstract String calculate(float a, float b);
}

// 具体策略角色
public class AddStrategy extends AbstractStrategy {
	public String calculate(float a, float b) {
		float result = a + b;
		return "相加结果为:" + result;
	}
}

public class SubStrategy extends AbstractStrategy {
	public String calculate(float a, float b) {
		float result = a - b;
		return "相减结果为:" + result;
	}
}

// 环境角色
public class ContextRole {
	// 拥有一个策略类的引用
	private AbstractStrategy abstactStrategy;

	public ContextRole(AbstractStrategy abstactStrategy) {
		this.abstactStrategy = abstactStrategy;
	}

	public String calculate(float a, float b) {
		String result = abstactStrategy.calculate(a, b);
		return result;
	}
}

// 客户端
public class Test {
	public static void main(String[] args) {
		float a = 200;
		float b = 25;
		ContextRole contextRole1 = new ContextRole(new AddStrategy());
		contextRole1.calculate(a, b);
	}
}

// 与工厂模式结合
public class ContextRole {
	// 拥有一个策略类的引用
	private AbstractStrategy abstactStrategy;

	public ContextRole(String type) {
		switch (type) {
		case "+":
			abstactStrategy = new AddStrategy();
			break;
		case "-":
			abstactStrategy = new SubStrategy();
			break;
		}
	}

	public void calculate(float a, float b) {
		abstactStrategy.calculate(a, b);
	}
}

public class Test {
	public static void main(String[] args) {
		float a = 200;
		float b = 25;
		ContextRole contextRole1 = new ContextRole("+");
		contextRole1.calculate(a, b);
	}
}

 

    优点:
    1. 可以很方便的动态改变算法或行为
    2. Strategy模式提供了用条件判断语句以外的另一中选择,消除条件判断语句,就是在解耦合。
    3. 简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

    缺点:
    1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
    2. 造成很多的策略类。

   

    含有许多条件判断语句的代码通常都需要Strategy模式


    在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象


    策略模式与简单工厂模式结合后,选择具体实现的职责也可以由Context来承担,这就最大化的减轻了客户端的压力

 

  • 大小: 22.9 KB
分享到:
评论

相关推荐

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    C++设计模式--基于Qt4开源跨平台开发框架

    行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...

    (行为型模式) Strategy 策略模式

    C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载

    设计模式-Strategy模式

    Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式的核心思想是将算法族封装在独立的对象中,使得它们可以互换使用,让算法的变化独立于使用算法的客户。 在上述的国际电子商务系统案例中...

    设计模式--策略模式java例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...

    设计模式-策略模式(Strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...

    java设计模式---诙谐易懂版

    1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以互换。策略模式让算法的变化独立于使用算法的客户端。在提供...

    Java 设计模式-策略模式(Strategy)Android讲解

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中...

    设计模式-策略者

    "策略者"(Strategy)设计模式是其中的一种行为模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客户。 在《设计模式-策略者》这篇文章中,作者深入浅...

    设计模式---策略者模式

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

    php设计模式-策略模式-例题学习

    策略模式是设计模式的一种,它允许我们在运行时动态地改变对象的行为。在这个"php设计模式-策略模式-例题学习"的例子中,我们将深入理解策略模式的运用及其在PHP中的实现。 首先,让我们来看看核心的类和接口: ...

    设计模式-策略模式-c++版

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C++中,策略模式主要用于封装一系列算法,并让它们之间可以互相替换,使得算法的变化独立于使用算法的客户。这种模式通常涉及三个主要角色:策略...

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C#中,策略模式经常被用来解决复杂的问题,特别是在需要动态切换算法或行为的场景下。它通过将算法封装到具有独立接口的类中,使得算法可以互相替换...

    设计模式专题之(十六)策略模式---设计模式策略模式示例代码(python--c++)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并在运行时选择合适的...

    设计模式培训-strategy

    策略模式是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端。 #### 七、策略模式应用场景示例——Duck Simulator 假设有一个鸭池仿真...

    设计模式--策略模式StrategyPattern

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并在运行时选择具体...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式...

    java设计模式--策略模式

    策略模式是Java设计模式中的一种行为模式,它允许在运行时选择算法或策略,从而提供了更大的灵活性。在HeadFirst的《设计模式》一书中,第一章深入浅出地讲解了这一模式,通过实例帮助读者理解其核心概念和应用场景...

    JAVA设计模式-chm版

    设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式(Creational Patterns): 这类模式关注对象的创建过程,包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract ...

Global site tag (gtag.js) - Google Analytics