Java设计模式之二:策略模式

简介: 策略模式的使用场景为把算法实现进行提取封装,独立于调用场景之外。策略模式的优点:1、当业务代码存在多重逻辑判断时,策略模式可以避免大量的if-else的判断,避免代码逻辑混乱,增强代码的可维护性;2、可将策略中的公共部分进行高度抽象,避免代码重复;策略模式的缺点:1、调用方必须知道所有的策略实现类,增加了调用方的使用难度;2、如果判断逻辑较多的话,会导致策略实现类较多;

引言

本文主要介绍策略模式的相关内容。主要说明策略模式是什么、怎么用及其对应的优缺点。

  • 策略模式介绍
  • 代码示例
  • 总结

一、策略模式介绍

到底什么是策略模式呢?按照我自己的理解,简单来说就是将具备统一任务属性的一类业务逻辑进行封装,调用方可以根据自身的业务场景和需要,进行策略的业务调用。

image.png

通过上图可知,策略模式涉及到的模块主要包括以下三个方面:

1、策略环境:类中包含策略引用;

2、抽象策略:抽象策略公共行为,包含所有策略的接口方法;

3、策略具体实现:封装了策略的不同算法实现;


二、代码示例

1、策略场景

public class StrategyContext {
    //持有一个具体策略的对象
    private Strategy strategy;
    /**
     * 构造函数,传入一个具体策略对象
     * @param strategy    具体策略对象
     */
    public StrategyContext(Strategy strategy){
        this.strategy = strategy;
    }
    /**
     * 策略方法
     */
    public void contextInterface(){
        strategy.strategyInterface();
    }
}

2、策略接口

public interface Strategy {
    /**
     * 策略方法
     */
    public void strategyInterface();
}

3、策略实现

public class StrategyA implements Strategy {
    @Override
    public void strategyInterface() {
        //相关的业务
    }
}
public class StrategyB implements Strategy {
    @Override
    public void strategyInterface() {
        //相关的业务
    }
}

4、策略使用

public class ContextClient {
  public static void main(String[] args) {
    Strategy  StrategyA = new StrategyA();
    StrategyContext contextA = new StrategyContext(StrategyA );
    //调用策略A的执行方法
    contextA.contextInterface();
  }
}

三、总结

策略模式的使用场景为把算法实现进行提取封装,独立于调用场景之外。

策略模式的优点:

1、当业务代码存在多重辑判断时,策略模式可以避免大量的if-else的判断,避免代码逻辑混乱,增强代码的可维护性;

2、可将策略中的公共部分进行高度抽象,避免代码重复;

策略模式的缺点:

1、调用方必须知道所有的策略实现类,增加了调用方的使用难度;

2、如果判断逻辑较多的话,会导致策略实现类较多;

相关文章
|
2天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
9 2
|
16天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
42 2
|
28天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
44 0
[Java]23种设计模式
|
11天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
31 3
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
28 2
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
62 3
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
27 3
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
30 1
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
【10月更文挑战第8天】 在软件开发的浩瀚宇宙中,设计模式如同星辰指引,照亮了代码设计与架构的航道。本文旨在深入探索PHP语境下策略模式(Strategy Pattern)的精髓,不仅剖析其内核原理,还将其融入实战演练,让理论在实践中生根发芽。策略模式,作为解决“如何优雅地封装算法族”的答案,以其独特的灵活性与扩展性,赋予PHP应用以动态变换行为的能力,而无需牵动既有的类结构。
28 2

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    43
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    50
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    58
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    64
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    59
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    42
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    112
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78