策略模式
为了满足不同子类具有不同的行为而设计
而且,它可以提供行为/算法的互换,使行为具有可变性
而且,支持扩展新的行为而不影响原有的代码
Sample1:
package pattern.strategy; /** * 策略模式 * 实现一组可相互切换的行为类/算法簇 */ public class StrategyExample { public static void main(String[] args) { int a = 1, b = 2; Strategy originalStrategy = new Add(); Context c = new Context(originalStrategy); int result = c.executeStrategy(a, b); System.out.println(result); //当某种条件发生时,切换策略 Strategy newStrategy = new Subtract(); c.changeStrategy(newStrategy); result = c.executeStrategy(a, b); System.out.println(result); } } class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } //对外提供改变策略的方法 public void changeStrategy(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int a, int b) { return this.strategy.execute(a, b); } } /** * 找出可能会发生变化的地方,独立进行封装 * 策略经常发生变化,所以要将其独立出来,与那些不变的代码进行隔离 */ interface Strategy { int execute(int a, int b); } class Add implements Strategy { public int execute(int a, int b) { return a + b; } } class Subtract implements Strategy { public int execute(int a, int b) { return a - b; } } class Multiply implements Strategy { public int execute(int a, int b) { return a * b; } }
Sample 2:
package pattern.strategy; public class FightDemo { public static void main(String[] args) { Character c = new Knight(); c.setWeapon(new AxeBehavior()); c.fight(); //更换武器 c.setWeapon(new SwordBehavior()); c.fight(); } } //========================================= abstract class Character { protected WeaponBehavior weapon; void setWeapon(WeaponBehavior w) { this.weapon = w; } abstract void fight(); } class Knight extends Character { @Override void fight() { System.out.println(Knight.class.getName() +" is fighting..."); this.weapon.useWeapon(); } } class King extends Character { @Override void fight() { System.out.println(King.class.getName() +" is fighting..."); this.weapon.useWeapon(); } } //========================================= /** * 行为接口 */ interface WeaponBehavior { void useWeapon(); } //行为一 class SwordBehavior implements WeaponBehavior { public void useWeapon() { System.out.println("Use sword!"); } } //行为二 class AxeBehavior implements WeaponBehavior { public void useWeapon() { System.out.println("Use axe!"); } }
相关推荐
标题"设计模式策略模式demo"指的是我们将通过一个实际的示例来演示如何在代码中应用策略模式。这个示例可能是基于Java或C#等语言的一个小项目,用于帮助开发者更好地理解和掌握策略模式的运用。 描述中的"参考...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式就是为了解决这类问题而提出的,它将每一种算法封装到具有共同...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。 首先,策略模式的...
iOS 设计模式 策略模式
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,当一个系统需要在不同时间执行不同的算法或者行为时,策略模式就显得尤为有用。这种模式将算法封装到独立的可相互替换的策略类中,使得...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在《Head First 设计模式》这本书中,策略模式被详细地讲解,并通过C++代码实现来加深理解。策略模式的核心思想是定义一系列的算法,并将每一个算法...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,将每个算法封装到具有共同接口的独立类中,使得它们可以相互替换。这样做的主要好处是算法的变化不会影响...
设计模式中的策略模式。根据《设计模式》一书编写
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
短小版的thinkphp3.2 缓存类 策略模式理解 希望可以帮助到你
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,通过将算法封装为独立的类并让它们遵循一个公共接口,我们可以根据需要动态地切换不同的算法,而不影响使用这些算法的客户代码。以下是策略...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...
1. **策略模式**:策略模式允许在运行时动态选择算法或策略。它将算法封装到独立的类中,使得算法之间的替换变得容易。在报告中,可能会展示如何通过接口定义策略接口,以及如何创建不同的实现策略的类,以便根据...
设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并在运行时选择合适的...
将校验和计算方式设计成接口,可以根据实际需求写接口实现类,然后再将数据和类实例传入计算得到期望的校验和值。
在本篇中,我们将深入探讨“策略模式”,这是一种行为设计模式,它使算法族能够互换,使得代码能根据环境或策略的不同选择不同的行为。 策略模式的核心思想是将算法封装在独立的类中,使得它们可以互相替换。这种...
Java 设计模式之策略模式与状态模式 策略模式是 Java 中的一种设计模式,它主要用于解决系统与第三方接口进行数据交互的问题。当系统需要与多种格式的数据进行交互时,使用策略模式可以很好地解决这个问题。例如,...