永远不要轻言放弃
原文地址:http://www.programcreek.com/2011/01/a-java-example-of-strategy-design-pattern/
***********************************************碎碎念的分割线*************************************************
策略模式也称作政策模式。
这有个关于策略模式的故事。假设Mike在有时候开车会超速,但不总是这样。他可能会被警察拦截下。可能这个警官人品比较和善,可能不给mike开罚单或者简单的警告下就让他走了。(我们可以称这样的警官为"NicePolice"。)也有可能他会被难对付的警官逮到还给他开个罚单。(我们可以称这样的警官为"HardPolice"。)他不会知道到底会被哪一种警官会拦截下,直到他真正的被逮到,这就是运行的时间。
这就是策略模式的全部意思。
1、类图
2、Java代码
定义一个接口Strategy,它有一个方法processSpeeding()
interface Strategy { public void processSpeeding(int speed); }
两类警官
class NicePolice implements Strategy { @Override public void processSpeeding(int speed) { // TODO Auto-generated method stub System.out.println("鉴于你第一次犯,下次注意!"); } }
class HardPolice implements Strategy { @Override public void processSpeeding(int speed) { // TODO Auto-generated method stub System.out.println("你的速度是" + speed + ",得给你张罚单"); } }
定义一个场景,调用一名警官来处理超速事件。
class Situation { private Strategy strategy; public Situation(Strategy strategy) { this.strategy = strategy; } public void handleByPolice(int speed) { strategy.processSpeeding(speed); } }
测试一下
public class Main { public static void main(String[] args) { HardPolice hard = new HardPolice(); NicePolice nice = new NicePolice(); Situation s1 = new Situation(hard); Situation s2 = new Situation(nice); s1.handleByPolice(100); s2.handleByPolice(100); } }
输出
你的速度是100,得给你张罚单
鉴于你第一次犯,下次注意!
鉴于你第一次犯,下次注意!
你可以拿策略模式跟状态模式比较一下,他们非常相似。主要不一样的地方是在对象的状态发生改变时,状态模式调用改变对象的行为。而策略模式主要是在不同的场景下用不同的算法。
3、JDK实际应用
1). Java.util.Collections#sort(List list, Comparator < ? super T > c)
2). java.util.Arrays#sort(T[], Comparator < ? super T > c)
2). java.util.Arrays#sort(T[], Comparator < ? super T > c)
sort方法在不同的场景下使用不同的Comparator.
相关推荐
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,当一个系统需要在不同时间执行不同的算法,或者当一个对象的行为需要随着它的内部状态或外部条件的变化而变化时,策略模式就能派上用场...
设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...
例如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者...策略模式(Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)等...
本书全面地介绍了多种经典的设计模式,并结合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 ...
本篇文章将深入探讨两种重要的设计模式:策略模式和模板模式。通过理解这两种模式,开发者可以更好地组织代码,提高代码的灵活性和可扩展性。 ### 策略模式 策略模式是一种行为设计模式,它使你能在运行时改变对象...
- 策略模式:在AI算法中,根据不同游戏环境和规则动态更换行为策略; - 观察者模式:在事件驱动的游戏中,实现不同游戏对象之间的通信和响应; - 组合模式:在场景图中表示对象和子对象,实现一致的处理方式; - ...
3. **行为型模式**:包括责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式主要处理对象之间的交互和职责分配。 例如,单例模式...
实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可扩展性和可维护性。 1. **策略模式**:策略模式...
总的来说,《设计模式:可复用面向对象软件的基础》是一本深入理解和应用面向对象设计的必备书籍,它不仅介绍了23种核心设计模式,还提供了大量实例和解释,帮助读者将理论知识转化为实际的编程技巧。通过对这本书的...
设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...
本资源主要涵盖了三种经典的设计模式:策略模式、工厂方法模式以及观察者模式,对于初学者来说是非常有价值的学习资料。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的...
在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...
在本文中,我们将深入探讨两个关键的设计模式:策略模式和装饰者模式,并结合生活中的实例来帮助理解它们。 首先,让我们来了解策略模式。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在日常生活...
3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+...
《设计模式:基于C#的工程化实现及扩展》是一份深入探讨软件设计模式的宝贵资源,它提供了C#语言下的具体实现与扩展,旨在帮助开发者提升代码的可读性、可维护性和可复用性。这个压缩包包含了多个源码文件,分别命名...
9. **策略**:策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换,策略让算法独立于使用它的客户。 这些设计模式都是面向对象编程...
策略模式\第三个设计模式:策略模式 - leoyu - JavaEye技术网站.htm
16. 策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 17. 命令模式:命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求、...