策略模式和工厂模式都是设计模式,但是它们的关注点不同。工厂模式关注对象的创建,而策略模式关注行为的封装。 ,,工厂模式是创建型模式,它提供了一种方式来创建对象,而不需要暴露对象的创建逻辑给客户端。工厂模式有两种类型:简单工厂和工厂方法。简单工厂是一种创建型模式,它提供了一个类来创建其他类的对象。工厂方法是一种创建型模式,它提供了一个接口来定义创建其他类对象的方法,让子类决定实例化哪一个类。,,策略模式是行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式可以让算法独立于使用它的客户端而变化。
本文目录导读:
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立的类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它们的客户端。
策略模式简介
策略模式是一种常用的设计模式,它主要用于在运行时动态地选择算法或行为,策略模式的主要优点是可以在不修改原有代码的情况下,轻松地添加新的算法或行为,同时还可以避免使用多重条件判断语句。
策略模式的组成
1、抽象策略(Strategy):定义所有支持的算法的公共接口。
2、具体策略(Concrete Strategy):实现抽象策略中的每一个方法,提供具体的算法实现。
3、上下文(Context):持有一个策略类的引用,提供给客户端调用策略的方法。
策略模式的优点
1、解耦:策略模式将算法和使用算法的对象分离,使得两者之间的依赖关系降低,提高了代码的可维护性。
2、可扩展性:策略模式允许在运行时动态地添加新的算法或行为,无需修改原有代码。
3、灵活性:策略模式可以根据不同的需求选择不同的算法或行为,提高了代码的灵活性。
策略模式的应用场景
1、排序算法:根据不同的排序需求,可以使用不同的排序算法,如冒泡排序、选择排序、插入排序等。
2、数据压缩:根据不同的数据类型和压缩需求,可以使用不同的压缩算法,如LZ77、LZW等。
3、网络传输:根据不同的网络环境和传输需求,可以使用不同的传输协议,如TCP、UDP等。
4、加密解密:根据不同的加密算法和解密需求,可以使用不同的加密解密算法,如对称加密、非对称加密等。
5、文件处理:根据不同的文件类型和处理需求,可以使用不同的文件处理算法,如文本文件处理、图片文件处理等。
策略模式的实现步骤
1、定义抽象策略类,实现公共接口。
2、定义具体策略类,实现抽象策略类中的每一个方法。
3、创建上下文对象,持有具体策略类的引用。
4、在客户端调用上下文对象的方法,执行相应的具体策略。
优点:解耦、可扩展性、灵活性。
缺点:当需要修改某个具体的策略时,可能需要修改多个客户端的代码;当需要增加新的策略时,可能需要修改上下文类的代码。
策略模式的实战案例
以计算器为例,我们可以使用策略模式来实现加减乘除四种基本运算功能,首先定义一个抽象策略类Operation
,然后定义四个具体策略类Add
、Subtract
、Multiply
和Divide
,最后创建一个上下文类Calculator
来执行相应的具体策略。
from abc import ABC, abstractmethod 抽象策略类 class Operation(ABC): @abstractmethod def execute(self, a, b): pass 具体策略类1:加法 class Add(Operation): def execute(self, a, b): return a + b 具体策略类2:减法 class Subtract(Operation): def execute(self, a, b): return a - b 具体策略类3:乘法 class Multiply(Operation): def execute(self, a, b): return a * b 具体策略类4:除法(注意:这里没有实现异常处理) class Divide(Operation): def execute(self, a, b): return a / b
接下来我们创建一个上下文类Calculator
,它持有一个策略类的引用,并提供一个方法来执行相应的具体策略,这样我们就可以在运行时动态地选择使用哪种运算策略。