`
shjie5246
  • 浏览: 11249 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
最近访客 更多访客>>
社区版块
存档分类
最新评论

java模式学习之策略模式

    博客分类:
  • java
阅读更多

学习java软件开发已有二年了,逐渐的从面向过程到面向对象编程,使我对开发有了一定的深入了解,也促使我对面向对象编程的深入学习,首先从设计模式开始。

以前也看过一些设计模式的书籍,但没有什么理解,也不懂其里面的思想,所以从现在开始,深入学习模式。

 

策略模式

策略模式属于对象的行为模式,其用意是针对一组算法,把每个算法封装到具有共同接口的独立类中,从而使它们能够互换。策略模式使得算法可以在不影响客户端的情况下发生变化。

所有这些算法完成的都是相同的工作,只有实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类和使用算法类之间的耦合。 

 

 

 

 

策略模式的结构

 策略模式涉及到三个角色:

 1)环境(context)角色:持有一个strategy类的引用

 2)抽象策略角色(strategy) 角色:此角色给出所有的具体策略类所需的接口,通常由一个接口或抽象类实现

 3)具体策略类角色(ConcreteStrategy):包装了相关的算法和行为

 

/**
 * 抽象策略角色
 */
public interface Strategy
{
	void operate();
}
/**
 * 具体策略角色
 */
public class ConcreteStrategy implements Strategy
{
	public void operate()
	{
		System.out.println("具体策略角色");
	}
}
/**
 * 环境角色
 */
public class Context
{
	Strategy strategy;
	public Context(Strategy strategy)
	{
		this.strategy = strategy;
	}
	
	public void operate()
	{
		this.strategy.operate();
	}
}

 

何时使用策略模式

 1)如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。

 2)如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法 类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则。客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。

 3)一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。

 4)如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现,此时,使用策略模式,把这些行为都转移到相应的策略类里面,就可以避免使用难以维护的条件选择语句,并体现出面向对象设计的概念。

 

 策略模式的优缺点

 优点:

  1) 策略模式提供了管理相关的算法族的办法

  2) 策略模式提供了可以替换继承关系的办法

  3) 策略模式可以避免使用多重条件选择语句

 缺点:

  1)客户端必须知道所有的策略类,并自行决定使用哪种策略类

  2)策略模式造成很多的策略类

分享到:
评论

相关推荐

    55-Java设计模式之策略模式与状态模式1

    Java 设计模式之策略模式与状态模式 策略模式是 Java 中的一种设计模式,它主要用于解决系统与第三方接口进行数据交互的问题。当系统需要与多种格式的数据进行交互时,使用策略模式可以很好地解决这个问题。例如,...

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

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

    《JAVA与模式》之策略模式

    javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解

    Java 设计模式 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过定义一系列的算法,并将每一...在Java开发中,尤其是在需要灵活处理算法选择的场景下,策略模式是一个值得学习和使用的工具。

    Java开发模式之策略模式

    策略模式是设计模式的一种,属于行为模式,它在Java开发中广泛应用,主要解决的是当算法有多种变化,而这些变化需要以不同的方式处理时的问题。通过策略模式,我们可以将算法封装在独立的策略类中,使得算法的变化...

    java设计模式-策略模式

    在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...

    JAVA设计模式demo之策略模式

    在这个"JAVA设计模式demo之策略模式"的示例中,你可能会看到以下的代码结构: 1. **策略接口**:`Strategy.java` ```java public interface Strategy { void execute(); } ``` 这个接口定义了一个通用的行为...

    java 策略模式的小例子

    在Java中,策略模式主要通过接口或抽象类来定义一系列的算法,并将每个算法封装起来,使得它们可以互相替换,让算法独立于使用它的客户。下面我们将深入探讨这个模式的概念、结构以及如何在Java中实现。 策略模式的...

    Java策略模式+案例

    在Java中,策略模式允许我们定义一组算法或策略,并将每个策略封装为一个类,使得它们可以互换,而不会影响到客户端代码。这种模式的核心在于"策略",即一系列可互相替换的算法或行为。 策略模式的主要优点包括: ...

    java策略模式示例.zip

    总的来说,这个"java策略模式示例"是一个很好的学习资源,通过实践可以深入理解策略模式的精髓,提高软件设计能力。在学习过程中,建议动手编写代码,模仿示例,甚至尝试创建自己的策略,以巩固理论知识并提升编程...

    java策略模式小例子

    在这个名为"java策略模式小例子"的项目中,我们可以预期看到一个简单的示例,演示了如何在Java中应用策略模式。`Strategy(Game)`可能包含了一些不同的策略类,每个类代表一种特定的游戏策略,以及一个上下文(Context...

    7.java模板模式与8.策略模式示例

    Java模板模式和策略模式是两种常用的面向对象设计模式,它们在软件开发中有着广泛的应用。模板模式是一种行为设计模式,而策略模式则属于结构型设计模式。这两种模式都是用来处理算法和行为的,但它们的核心理念和...

    java设计模式之策略模式实现源码

    在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。 首先,策略模式的核心是策略接口。这个接口定义了一组相关或相互排斥的操作,这些...

    JAVA设计模式例程-策略模式

    总的来说,这个“JAVA设计模式例程-策略模式”提供了一个学习和实践策略模式的好例子,通过阅读和分析源代码,我们可以更好地理解如何在实际开发中应用这一模式,提升我们的编程技巧和设计能力。

    java 策略模式demo

    总结来说,这个"java 策略模式demo"是学习和理解如何在Java项目中应用策略模式的一个很好的实例。它展示了如何通过接口定义策略,如何实现这些策略,以及如何在上下文中使用它们。通过分析和研究这个示例,开发者...

    java设计模式之策略模式

    在"java设计模式之策略模式"的学习中,我们可以通过一个简单的例子来理解它的应用。例如,在一个软件系统中,我们可能需要对不同的数据进行排序,不同的排序算法(如冒泡排序、快速排序、插入排序等)可以被视为策略...

    Java设计模式之策略模式

    **策略模式**是Java设计模式中的行为模式之一,它的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客户。在Java编程中,策略模式常用于处理那些...

    设计模式之策略模式Java实现和类设计图

    在Java中,策略模式通常涉及定义一系列算法,将每个算法封装到具有共同接口的独立类中,使得它们可以相互替换。这样做的主要好处是算法的变化不会影响到使用算法的客户。 策略模式的核心组成部分包括上下文...

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

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

Global site tag (gtag.js) - Google Analytics