iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么理解Java设计模式的策略模式
  • 484
分享到

怎么理解Java设计模式的策略模式

2023-06-25 13:06:32 484人浏览 八月长安
摘要

这篇文章主要讲解了“怎么理解Java设计模式的策略模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的策略模式”吧!一、什么是策略模式策略模式定义了一系列算法,并将每

这篇文章主要讲解了“怎么理解Java设计模式的策略模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的策略模式”吧!

一、什么是策略模式

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。

策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。

一种很简单的解释,在我们的开发过程中,经常会遇到大量的if...else或者switch...case语句,当这些语句在开发中只是为了起到分流作用,这些分流和业务逻辑无关,那么这个时候就可以考虑用策略模式。

二、策略模式的结构

怎么理解Java设计模式的策略模式

这个模式涉及到三个角色:

上下文环境(Context)角色:持有一个Strategy的引用。

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

具体策略(ConcreteStrategy)角色:包装了相关的算法或行为

三、策略模式的应用场景

举一个例子,商场搞促销--打8折,满200送50,满1000送礼物,这种促销就是策略。

再举一个例子,dota里面的战术,玩命四保一,三伪核体系,推进体系,大招流体系等,这些战术都是一种策略。

应用场景:

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

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

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

四、策略模式的优缺点

优点:

结构清晰,把策略分离成一个个单独的类「替换了传统的 if else」2、代码耦合度降低,安全性提高「各个策略的细节被屏蔽」

缺点:

客户端必须要知道所有的策略类,否则你不知道该使用那个策略,所以策略模式适用于提前知道所有策略的情况下2、策略类数量增多(每一个策略类复用性很小,如果需要增加算法,就只能新增类)五、策略模式和简单工厂模式的异同

在上篇文章已经提过了,传送地址:深入理解设计模式(二):简单工厂模式

六、策略模式的实现

Strategy类,定义所有支持的算法的公共接口

//Strategy类,定义所有支持的算法的公共接口abstract class Strategy{    //算法方法    public abstract void AlGorithmInterface();}

oncreteStrategy,封装了具体的算法或行为,继承于Strategy

//算法A    class ConcreteStrategyA : Strategy    {        public override void AlgorithmInterface()        {            Console.WriteLine("算法A的实现");        }    }    //算法B    class ConcreteStrategyB : Strategy    {        public override void AlgorithmInterface()        {            Console.WriteLine("算法B的实现");        }    }    //算法C    class ConcreteStrategyC : Strategy    {        public override void AlgorithmInterface()        {            Console.WriteLine("算法C的实现");        }    }

Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用

//Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用    class Context    {        Strategy Strategy;        public Context(Strategy Strategy)        {            this.Strategy = Strategy;        }        //上下文接口        public void ContextInterface()        {            Strategy.AlgorithmInterface();        }    }

客户端代码

static void Main(string[] args)        {            Context Context;            Context = new Context(new ConcreteStrategyA());            Context.ContextInterface();            Context = new Context(new ConcreteStrategyB());            Context.ContextInterface();            Context = new Context(new ConcreteStrategyC());            Context.ContextInterface();            Console.Read();        }

七、策略模式和简单工厂模式的结合

改造后的Context

class Context    {        Strategy Strategy=null;        public Context(string type)        {            switch (type)            {                case "A":                    ConcreteStrategyA A = new ConcreteStrategyA();                    Strategy = A;                    break;                case "B":                    ConcreteStrategyB B = new ConcreteStrategyB();                    Strategy = B;                    break;                case "C":                    ConcreteStrategyC C = new ConcreteStrategyC();                    Strategy = C;                    break;            }        }        //上下文接口        public void ContextInterface()        {            Strategy.AlgorithmInterface();        }    }

改造后的客户端代码

static void Main(string[] args)        {            Context Context = new Context("这里是相应的算法类型字符串");            Context.ContextInterface();            Console.Read();        }

对比下改造前后的区别不难看出,改造前客户端需要认识两个类,Context和ConcreteStrategy。而策略模式和简单工厂模式结合后,客户端只需要认识一个类Context,降低了耦合性。

八、策略枚举的实现

我们可以使用枚举在一个类中实现以上所有的功能及三种不同的角色,下面看看怎么通过枚举来实现策略模式

public enum Calculator {    ADD("+") {                public int exec(int a, int b) {                return a+b;                }    },            SUB("-") {                public int exec(int a, int b) {                    return a-b;                    }        };                public abstract int exec(int a, int b);            //运算符        private String value = "";            private Calculator(String value)    {                this.value = value;    }         public String getValue()     {                return value;    }}

在枚举类中,定义的抽象方法就像当时之前的接口,每一个枚举ADD SUB相当是一个具体的实现类(策略角色),而整个枚举类就是策略的分装角色。

感谢各位的阅读,以上就是“怎么理解Java设计模式的策略模式”的内容了,经过本文的学习后,相信大家对怎么理解Java设计模式的策略模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么理解Java设计模式的策略模式

本文链接: https://www.lsjlt.com/news/305034.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解Java设计模式的策略模式
    这篇文章主要讲解了“怎么理解Java设计模式的策略模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的策略模式”吧!一、什么是策略模式策略模式定义了一系列算法,并将每...
    99+
    2023-06-25
  • java设计模式--策略模式详解
    目录策略模式Demo代码:总结策略模式 策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来...
    99+
    2024-04-02
  • Java设计模式之策略模式
    在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。 一、概念理解 策略模式的概...
    99+
    2022-11-13
    Java 设计模式 策略模式
  • 深入理解Java设计模式之策略模式
    目录一、什么是策略模式二、策略模式的结构三、策略模式的应用场景四、策略模式的优缺点六、策略模式的实现七、策略模式和简单工厂模式的结合八、策略枚举的实现九、总结一、什么是策略模式 策略...
    99+
    2024-04-02
  • Java设计模式之java策略模式详解
    目录为什么使用策略模式?策略模式包含角色策略模式的类图排序案例策略模式的优点策略模式的缺点适用场景源码分析策略模式的典型应用Java Comparator 中的策略模式参考文...
    99+
    2024-04-02
  • java设计模式的策略模式是什么
    这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
    99+
    2023-07-02
  • java设计模式之策略模式怎么实现
    这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,...
    99+
    2023-05-31
    java
  • Java特性之设计模式【策略模式】
    一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随...
    99+
    2023-10-18
    策略模式 java 设计模式
  • Java 设计模式中的策略模式详情
    目录策略模式的应用场景是否符合有没有必要不用策略模式例子使用策略模式策略上下文策略接口以及具体实现类Main类两种方式的不同策略模式有没有必要使用?如何避免Context类使用判断逻...
    99+
    2024-04-02
  • Java设计模式之策略模式示例详解
    目录定义结构UML类图UML序列图深入理解策略模式策略和上下文的关系策略模式在JDK中的应用该策略接口有四个实现类策略模式的优点策略模式的缺点策略模式的本质在讲策略模式之前,我们先看...
    99+
    2024-04-02
  • Java设计模式之策略模式案例详解
    目录优缺点Spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可维...
    99+
    2024-04-02
  • 深入了解Java设计模式之策略模式
    目录定义解决的问题核心要点类图溢出效用代码实现核心接口实现类-三个Context类Main方法拓展JDK源码Spring源码定义 定义了算法家族,分别封装起来,让他们之间可以相互替换...
    99+
    2024-04-02
  • JAVA设计模式中的策略模式你了解吗
    目录策略模式策略模式是什么策略模式的使用场景策略模式实践总结策略模式 世界上本没有模式; 一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇; 并整理出固定的写法规范,这个...
    99+
    2024-04-02
  • C#设计模式之策略模式
    策略模式 所谓策略其实就是做一件事情有很多很多的方法,比如说一个商场要搞促销,促销的方式有可能有很多:打折啊,满100返50啊、积分等等之类的。这种不同的促销方式在我们系统中表示就是...
    99+
    2024-04-02
  • QtC++ 设计模式(四)——策略模式
    策略模式 序言理解源码 序言 还是参考的菜鸟教程,会C++的还是看C++的方式来得舒服。 . 理解 使用符合UML规范的便于理解和回忆,接口其实就是普通的基类 . 源码 strategy.h /// 策略class Strat...
    99+
    2023-08-30
    c++ 设计模式 策略模式
  • javascript设计模式之策略模式
    目录一. 认识策略模式二. 具体实现和思想三. 策略模式的实际运用四. 总结一. 认识策略模式 策略模式的定义:定义一系列的算法,将他们一个个封装起来,使他们直接可以相互替换。 策略...
    99+
    2024-04-02
  • JavaScript设计模式之策略模式详解
    什么是设计模式?为什么需要学习设计模式? 学习设计模式的目的是:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络...
    99+
    2024-04-02
  • Python设计模式中的策略模式详解
    目录策略模式命令模式策略模式 策略模式是一个经典的模式,简化代码。 电商领域有个功能明细可以使用“策略”模式,就是根据客户的属性或订单中的商品计算折扣。 比如...
    99+
    2023-02-08
    Python策略模式 Python设计模式
  • java策略设计模式怎么实现
    在Java中实现策略设计模式,可以按照如下步骤进行:1. 定义一个策略接口(或者抽象类),该接口包含多个具体策略类共同的方法。2. ...
    99+
    2023-08-31
    java
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作