策略模式和工厂模式是两种不同的设计模式,它们的目的、结构、适用场景以及客户端与模式的关系都有所不同。工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。而策略模式是一种行为型设计模式,旨在定义一系列算法,并将每个算法封装起来,使它们可以互换。它主要解决的是“如何选择行为”的问题 。
在计算机科学中,设计模式是解决特定问题的优秀解决方案,它们被广泛接受并用于各种编程语言和框架中,我们将深入探讨一种常见的设计模式——策略模式。
策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它的客户端。
我们来理解一下策略模式的主要角色:
抽象策略(Strategy):定义所有支持的算法的公共接口。
具体策略(Concrete Strategy):实现抽象策略中的操作,每一个具体的策略类都实现了一个具体的策略。
上下文(Context):持有一个策略类的引用,提供给客户端使用。
下面是一个简单的Python示例来说明如何实现策略模式:
```python
from abc import ABC, abstractmethod
抽象策略类
class Strategy(ABC):
@abstractmethod
def execute_strategy(self, a, b):
pass
具体策略类A
class ConcreteStrategyA(Strategy):
def execute_strategy(self, a, b):
return a + b
具体策略类B
class ConcreteStrategyB(Strategy):
def execute_strategy(self, a, b):
return a * b
上下文类
class Context:
def __init__(self, strategy: Strategy):
self._strategy = strategy
def set_strategy(self, strategy: Strategy):
self._strategy = strategy
def execute_strategy(self, a, b):
return self._strategy.execute_strategy(a, b)
```
在这个例子中,我们定义了一个策略接口Strategy
,以及两个具体策略类ConcreteStrategyA
和ConcreteStrategyB
,每个类实现了Strategy
接口的execute_strategy
方法,然后我们在Context
类中使用这些策略对象,这样,如果我们需要改变我们的策略,我们只需要改变Context
类中的策略对象即可,而不需要修改使用这个策略的代码。