Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式

【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】

知识回顾:
>

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】。

策略模式

策略模式核心思想是:在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

策略模式VS状态模式

无论是从代码实现上,还是类图,策略模式和状态模式几乎都一样,但他们本质上是有所不同的,策略模式是完成一件事有不同实现方式,不同的行为;但是状态模式是某一个对象对应的不同状态,总体还是完成一件事,这件事中对应着不同的状态,你可以简单的把它理解为它只有一种策略,这种策略下对应着多种状态。

解决的问题

有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

应用策略模式的场景

做同一件事情的不同的行为。

生活中关于策略模式应用的场景

  1. 旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
  2. 会员、普通用户、超级会员等等对应不同的打折策略。
  3. 等等。。。等等。。。。

    生产开发中常用的使用场景

  4. Spring框架中,Resource接口,资源访问策略

  5. 解决一道算法题目的不同策略。
  6. 等等。。。。。等等。。。。

策略模式优点与缺点

优点

  1. 算法可以自由切换。
  2. 避免使用多重条件判断。
  3. 扩展性良好。

缺点

  1. 策略类会越来越多,后期不利于管理与维护。
  2. 所有策略类都需要对外暴露,不够安全。

核心角色

定义规则接口的Strategy,实现规则接口策略的具体的类,以及使用某种策略的类Context。

UML类图

image.png

实现代码

我们举这样一个栗子:一场算法竞赛中,有一道题目非常有意思,有多种解法:假设:解法1:暴力法 解法2:双指针 解法3:线段树

接口策略类

package com.strategy;

interface Strategy {
   
   
   void solveProblemDifferentsMethods();
}

具体实现类1

package com.strategy;

class BFStrategy implements Strategy{
   
   

    @Override
    public void solveProblemDifferentsMethods() {
   
   
        // TODO Auto-generated method stub
        System.out.println("这道题目我使用暴力解法解决啦。。。。BFStrategy");
    }

}

具体实现策略类2

package com.strategy;

class TwoPonterStrategy implements Strategy{
   
   

    @Override
    public void solveProblemDifferentsMethods() {
   
   
        // TODO Auto-generated method stub
        System.out.println("这道题目我使用双指针解法解决啦。。。。TwoPonterStrategy");
    }

}

具体实现策略类3

package com.strategy;

class SegmentTreeStrategy implements Strategy{
   
   

    @Override
    public void solveProblemDifferentsMethods() {
   
   
        // TODO Auto-generated method stub
        System.out.println("这道题目我使用线段树解法解决啦。。。。SegmentTreeStrategy");
    }

}

设置使用策略的类

package com.strategy;

class Context{
   
   

    private Strategy strategy;

    public Context(Strategy strategy){
   
   
      this.strategy = strategy;
    }

   public void exec(){
   
   
        strategy.solveProblemDifferentsMethods();
   }

}

测试代码

package com.strategy;

public class Main {
   
   

    public static void main(String[] args){
   
   
        Strategy strategy=new BFStrategy();
        Context context=new Context(strategy);
        context.exec();
        System.out.println("方案一暴力法成功解决。。。。。");
        strategy=new TwoPonterStrategy();
        context=new Context(strategy);
        context.exec();
        System.out.println("方案二双指针法成功解决。。。。。");
        strategy=new SegmentTreeStrategy();
        context=new Context(strategy);
        context.exec();
        System.out.println("方案一线段树方法成功解决。。。。。");
    }
}

运行结果展示:

image.png

好了,到这里【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】就结束了,23种设计模式持续更新汇总中。

相关文章
|
9月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1065 157
|
9月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
907 2
|
11月前
|
设计模式 缓存 Java
Java设计模式(二):观察者模式与装饰器模式
本文深入讲解观察者模式与装饰器模式的核心概念及实现方式,涵盖从基础理论到实战应用的全面内容。观察者模式实现对象间松耦合通信,适用于事件通知机制;装饰器模式通过组合方式动态扩展对象功能,避免子类爆炸。文章通过Java示例展示两者在GUI、IO流、Web中间件等场景的应用,并提供常见陷阱与面试高频问题解析,助你写出灵活、可维护的代码。
|
9月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
2531 35
|
9月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
649 8
|
设计模式 算法 Java
Java工厂策略模式介绍
本文介绍Java中工厂模式与策略模式的结合应用,通过工厂创建策略对象,实现灵活、可扩展的支付、折扣等业务场景,提升系统解耦与维护性。
351 3
|
10月前
|
设计模式 人工智能 算法
基于多设计模式的状态扭转设计:策略模式与责任链模式的实战应用
接下来,我会结合实战案例,聊聊如何用「策略模式 + 责任链模式」构建灵活可扩展的状态引擎,让抽奖系统的状态管理从「混乱战场」变成「有序流水线」。
|
11月前
|
设计模式 安全 Java
Java设计模式(一):单例模式与工厂模式
本文详解单例模式与工厂模式的核心实现及应用,涵盖饿汉式、懒汉式、双重检查锁、工厂方法、抽象工厂等设计模式,并结合数据库连接池与支付系统实战案例,助你掌握设计模式精髓,提升代码专业性与可维护性。
|
11月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
392 16

热门文章

最新文章