首页 > 其他分享 >策略模式

策略模式

时间:2024-09-17 15:14:06浏览次数:8  
标签:策略 int 接口 Strategy 算法 模式

策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式允许算法在不影响客户端的情况下变化,从而提高了代码的灵活性和可维护性。

策略模式的组成

策略模式由以下几个部分组成:

  1. 抽象策略(Strategy):这是一个接口或抽象类,定义了某一类算法的公共接口。例如,它可以是排序算法的接口,里面定义了排序的方法。
  2. 具体策略(Concrete Strategy):实现了抽象策略接口的具体算法类。每个具体策略类代表一种算法的实现。例如,可以有不同的排序算法(如快速排序、冒泡排序等)实现同一个排序接口。
  3. 上下文(Context):持有一个策略的引用,并在具体需要使用算法时调用策略对象的方法。上下文对象不需要了解算法的细节,只需调用策略接口即可。上下文可以在运行时动态地更换策略,从而改变算法的行为。

策略模式的优点

  • 算法可以自由切换:策略模式使得算法的切换变得简单透明,用户可以根据需要动态地选择合适的策略。
  • 避免使用多重条件判断:通过策略模式,可以避免代码中出现复杂的条件分支语句(如 if-elseswitch-case),提高了代码的可读性和维护性。
  • 扩展性良好:新增一种策略时,只需新增一个具体策略类,而无需修改原有代码,符合开闭原则。

策略模式的缺点

  • 策略增多:随着策略的增加,类的数量也会增加,系统变得复杂。
  • 客户端必须了解所有策略:客户端需要知道所有可能的策略,并且知道何时使用哪种策略。

策略模式的应用场景

  • 需要动态选择算法的情况:如不同的排序算法、加密算法等,根据实际情况选择合适的算法。
  • 需要避免条件判断代码的情况:当程序中有大量的条件分支时,可以考虑使用策略模式进行重构。
  • 需要扩展性高的情况:策略模式允许新策略的引入而无需修改已有代码,非常适合需要频繁变化和扩展的系统。

策略模式的示例代码

以下是一个使用策略模式的简单示例,假设有一个计算系统,支持不同的计算方式:

//抽象策略
public interface Strategy {
    int doOperation(int num1, int num2);
}
//具体策略 - 减法
public class Subtraction implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1-num2;
    }
}
//具体策略 - 

在这个例子中,PaymentStrategy 是抽象策略接口,不同的支付方式如 AlipayStrategyWeChatPayStrategyCreditCardStrategy 是具体策略,而 PaymentContext 是上下文类,它持有一个策略,并根据客户端的选择执行对应的支付方式。

标签:策略,int,接口,Strategy,算法,模式
From: https://www.cnblogs.com/20lxj666/p/18396283

相关文章

  • 命令模式
    命令模式命令模式(CommandPattern)是行为型设计模式之一,它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,以及对请求排队或记录请求日志等操作。通过使用命令模式,命令的发出者与命令的执行者可以完全解耦。命令模式的结构Command(命令接口/抽象类):定义了执行命令......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。责任链模式的主要角色:抽象处理者(Handler):定......
  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......
  • 单列模式
    单列模式“单例模式(SingletonPattern),用于确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这个模式在需要控制资源的访问或者确保某些操作只有一个实例时使用。单例模式的特点唯一性:保证一个类只有一个实例。全局访问:提供一个全局的访问点来获取这个实例。延迟......
  • 23种设计模式
    23种设计模式设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:1.创建型模式1.1单例模式(Singleton)目的:确保一个类只有一个实例,并提供一个全局访问点。适用场......
  • 适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,用于解决接口不兼容的问题。它的主要作用是将一个类的接口转换成客户端期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以一起工作。概念目标接口(Target):客户端期望使用的接口。源接口(Adaptee):需要被......
  • 原型模式
    原型模式原型模式(PrototypePattern)是一种创建型设计模式,其主要目的是通过复制现有的对象来创建新的对象,而不是通过构造函数进行实例化。这个模式的核心思想是“克隆”现有对象,以获得新的实例,尤其是在创建成本较高的情况下非常有用。原型模式通常涉及以下几个角色:原型(Prototyp......
  • 建造者模式
    建造者模式建造者模式(BuilderPattern)是一种创建型设计模式,它用于分步骤地创建复杂对象,而无需直接调用构造函数。通过将对象的构建过程与其表示(即对象内部细节的实现)分离,建造者模式允许创建不同的对象表示,同时保持构造过程的一致性。特点分步骤创建:建造者模式将对象的创建过程......
  • 抽象工厂模式
    抽象工厂模式抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式常用于需要创建一组相关或依赖对象的场景,确保这些对象在不同的环境中可以协同工作。特点抽象工厂:定义了一组创......
  • 享元模式
    享元模式(FlyweightPattern)是一种结构型设计模式,旨在通过共享大量细粒度对象来减少内存使用。它在需要创建大量相似对象的场景中尤其有用,通过共享对象来降低内存开销,从而提高性能。核心思想享元模式将对象的状态分为两部分:内部状态(IntrinsicState):不随外部环境改变,可以共享的......