Java设计模式-策略模式

简介: Java设计模式-策略模式

微信截图_20220524212443.png


Java设计模式-策略模式,一起来看看吧,让我们一起为进阶做一个充足的准备吧!!!!

会了就当复习丫,不会来一起来看看吧。

很喜欢一句话:“八小时内谋生活,八小时外谋发展”。

如果你也喜欢,让我们一起坚持吧!!

共勉😁


封面:我想这才是夏天吧,心目中的夏天


设计模式系列


一、前言


1)引入:


在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,今天的作业该让这个女朋友写还是那个女朋友写勒?好难选啊,算了吧还是自己来吧。(其实就是没有😂)。正文:例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。


大家编程肯定知道,当实现某一个功能存在多种算法或者策略时,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如我们写个排序算法题,可以选择二叉树排序、快速排序、堆排序等,根据给出的条件不同,从中选出最适合的排序算法。


还有咱们作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。


微信截图_20220524212604.png


2)概述:


策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。


策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。


3)角色结构:


策略模式的主要角色如下。


  1. 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。


  1. 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。


  1. 环境(Context)类:持有一个策略类的引用,最终给客户端调用。


4)使用场景:


1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。


2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。


3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。


4、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。


5)注意事项:


如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。


二、案例代码


2.1、案例:


【例】促销活动


一家百货公司在定年度的促销活动。针对不同的节日(春节、中秋节、圣诞节)推出不同的促销活动,由促销员将促销活动展示给客户。


类图:


微信截图_20220524212704.png


2.2、实现:


定义百货公司所有促销活动的共同接口


public interface Strategy {
    void show();
}


定义具体策略角色(Concrete Strategy):每个节日具体的促销活动


//为春节准备的促销活动A
public class StrategyA implements Strategy {
    public void show() {
        System.out.println("春节活动:买一送一");
    }
}
//为中秋准备的促销活动B
public class StrategyB implements Strategy {
    public void show() {
        System.out.println("中秋活动:满200元减50元");
    }
}
//为圣诞准备的促销活动C
public class StrategyC implements Strategy {
    public void show() {
        System.out.println("圣诞活动:满1000元加一元换购任意200元以下商品");
    }
}


定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员


public class SalesMan {
    //持有抽象策略角色的引用                              
    private Strategy strategy;                 
    public SalesMan(Strategy strategy) {       
        this.strategy = strategy;              
    }                                          
    //向客户展示促销活动                                
    public void salesManShow(){                
        strategy.show();                       
    }                                          
}           


客户端:


public class Client {
    public static void main(String[] args) {
        SalesMan salesMan = new SalesMan(new StrategyA());
        salesMan.salesManShow();
        System.out.println("-----------");
        SalesMan salesManB = new SalesMan(new StrategyB());
        salesManB.salesManShow();
        System.out.println("-----------");
        /**
         * 春节活动:买一送一
         * -----------
         * 中秋活动:满200元减50元
         * -----------
         */
    }
}


三、总结


优点:


  1. 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。


  1. 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。


  1. 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if...else 语句、switch...case 语句。


  1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码


缺点:


  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。


  • 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。


四、自言自语


我也不知道文章写出来是有用还是无用,只是想做一个分享。希望大家能够喜欢并且在这里能有收获。


当然不可否认,我也想获得那种别人认可的那种快乐,并且能让我继续坚持。


你好啊,要天天开心哦。下篇文章再见。


此系列还在持续更新中.... 我一定还会回来的。😁


目录
相关文章
|
14天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
41 2
|
26天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
43 0
[Java]23种设计模式
|
10天前
|
设计模式 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应用以动态变换行为的能力,而无需牵动既有的类结构。
26 2
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
在PHP开发中,设计模式是提高代码可读性、可维护性和扩展性的重要工具。本文将深入探讨策略模式这一行为型设计模式,通过分析其定义、结构、使用场景以及在PHP中的实际应用,帮助开发者更好地理解和运用策略模式来优化自己的项目。不同于传统摘要的简洁概述,本文摘要部分将详细阐述策略模式的核心理念和在PHP中的实现方法,为读者提供清晰的指引。