策略模式是一种行为型设计模式,它使你能在运行时改变对象的行为。工厂模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方式。这两种模式都有各自的应用场景和优缺点,但它们之间并没有直接的关系。
在软件开发中,设计模式是一种解决常见问题的模板,它们提供了一种方式来组织代码,使其更易于理解和维护,策略模式是这些设计模式中的一种,它允许在运行时更改对象的行为,这种模式在许多应用程序中都非常有用,包括游戏、图形编辑器和文本编辑器等。
策略模式的基本思想是将算法封装到具有共同接口的独立的类中,使得它们可以相互替换,策略模式涉及到三个主要角色:
1、上下文(Context):持有一个Strategy的引用。
2、策略(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现,此角色定义了一组算法,可供上下文调用。
3、具体策略(ConcreteStrategy):这是实现了策略接口的具体类。
让我们通过一个简单的例子来理解策略模式,假设我们正在开发一个游戏,游戏中的角色可以根据不同的环境选择不同的行动策略,如果角色在森林中,他可能会选择“潜行”策略;如果角色在平原上,他可能会选择“奔跑”策略。
在策略模式中,我们可以将每种环境定义为一个策略,我们可以创建一个角色类,该类有一个方法,该方法接受一个策略对象作为参数,当角色需要改变行动时,他只需要更改传递给这个方法的策略对象即可。
以下是使用Python实现的一个简单的策略模式示例:
from abc import ABC, abstractmethod 策略接口 class Strategy(ABC): @abstractmethod def execute(self): pass 具体策略:潜行 class Stealth(Strategy): def execute(self): return "潜行" 具体策略:奔跑 class Run(Strategy): def execute(self): return "奔跑" 角色类 class Character: def __init__(self, strategy: Strategy): self.strategy = strategy def set_strategy(self, strategy: Strategy): self.strategy = strategy def act(self): return self.strategy.execute() 创建角色和策略 character = Character(Stealth()) print(character.act()) # 输出:潜行 character.set_strategy(Run()) print(character.act()) # 输出:奔跑
在这个例子中,Strategy
是一个抽象基类,它定义了一个名为execute
的抽象方法。Stealth
和Run
是具体策略,它们都实现了execute
方法。Character
类有一个strategy
属性和一个act
方法,act
方法调用strategy
对象的execute
方法。
策略模式的优点在于它可以使算法独立于使用它的客户端,从而使客户端更简单、更清晰,策略模式也支持开闭原则,即软件实体(类、模块、函数等)应该对扩展开放,对修改关闭,这意味着如果你需要添加新的行为,你只需要添加一个新的策略,而不需要修改现有的代码。