返回顶部
首页 > 资讯 > 精选 >Java的策略模式用代码怎么实现
  • 519
分享到

Java的策略模式用代码怎么实现

2023-06-29 13:06:51 519人浏览 安东尼
摘要

这篇文章主要介绍“Java的策略模式用代码怎么实现”,在日常操作中,相信很多人在Java的策略模式用代码怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的策略模式用代码怎么实现”的疑惑有所帮助!

这篇文章主要介绍“Java的策略模式用代码怎么实现”,在日常操作中,相信很多人在Java的策略模式用代码怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的策略模式用代码怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    策略模式

    策略模式属于Java 23种设计模式中行为模式之一,那先看看什么是策略模式。

    1、什么是策略模式

    策略模式的定义:

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

    其实我们在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等。或者比如网购,你可以选择工商银行、农业银行、建设银行等等,但是它们提供的算法都是一致的,就是帮你付款。

    软件开发中也会遇到相似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。

    2、策略模式的优缺点

    优点:

    • 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句

    • 提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码

    • 提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的

    • 提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法把算法

    • 的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离

    缺点:

    • 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类

    • 策略模式造成很多的策略类,增加维护难度

    3、策略模式的结构

    抽象策略类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。

    具体策略类:实现了抽象策略定义的接口,提供具体的算法实现。

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

    结构图:

    Java的策略模式用代码怎么实现

    4、代码实现

    现在有三只鸭子: 绿毛鸭、红毛鸭、小鸭子(小鸭子还不会飞)

    现在定义一个鸭子的父类:里面有都会叫的方法,有显示外观的方法(因为每只都不一样,就需要子类重写)

    还会飞行 (这里使用策略模式)

    public  abstract class duck {    //鸭子都会叫:    public void quack(){        System.out.println("嘎嘎嘎");    }    //鸭子的外观,因为都不一样,所以由子类去实现    public abstract void display();//以下使用策略模式:    //在父类中持有该接口,并由该接口代替飞行行为(组合)    private Flying flying;    //提供set方法    public void setFlying(Flying flying) {        this.flying = flying;    }    public void fly(){        flying.Fly();    }}

    定义一个飞行接口:

    public interface Flying {    void Fly();}

    我们知道策略模式就是把需要用的算法封装起来,就在另一个内封装了会飞不会飞的两个方法:

    会飞(继承至上面的飞行接口,重写飞行方法):

    public class FlyWithWin implements Flying {    @Override    public void Fly() {        System.out.println("我会飞");    }}

    不会飞:

    public class FlyNoWay implements Flying {    @Override    public void Fly() {        System.out.println("我不会飞行");    }}

    注意: 上面这两个方法我是把他们单独封装起来,当做算法族,然后程序需要使用里面某个算法的时候,程序不会受算法改变的影响,因为这里面的算法最终效果是一致的

    红毛鸭类:

    public class RedDuck extends duck{    public RedDuck(){        super();        //给鸭子注入飞行的能力,这里就是通过算法族里面的会飞的算法        super.setFlying(new FlyWithWin());    }    @Override    public void display() {        System.out.println("我是红色的鸭子");    }}

    绿毛鸭:

    public class GreenDuck extends duck{    public GreenDuck(){        super();        //给鸭子注入飞行的能力,这里也是通过算法族里面的会飞的算法        super.setFlying(new FlyWithWin());    }    @Override    public void display() {        System.out.println("我是绿色的鸭子");    }}

    小鸭子类(不会飞):

    public class SamllDuck extends duck{    public SamllDuck(){        super();        //小鸭子不会飞,所以使用了算法族里面不会飞的算法        super.setFlying(new FlyNoWay());    }    @Override    public void display() {        System.out.println("我还是小鸭子");    }    //因为小鸭子和大鸭子的叫声不一样,所以重写叫声方法    public void quack(){        System.out.println("嘎~嘎~嘎");    }}

    测试类:

    public class Test {    public static void main(String[] args) {        System.out.println("***测试鸭子程序***");        duck d = null;//这下面是轮流运行!!!!          d = new RedDuck();  //测试红色的鸭子        d = new GreenDuck();  //测试绿色的鸭子        d = new SamllDuck();  //测试小鸭子        d.display();        d.quack();        d.fly();        System.out.println("***测试完毕***");    }}

    当使用红毛鸭为对象时:

    ***测试鸭子程序***
    我是红色的鸭子
    嘎嘎嘎
    我会飞
    ***测试完毕***

    当使用绿毛鸭为对象时:

    ***测试鸭子程序***我是绿色的鸭子嘎嘎嘎我会飞***测试完毕***

    当使用小鸭子为对象时:

    ***测试鸭子程序***
    我还是小鸭子
    嘎~嘎~嘎
    我不会飞行
    ***测试完毕***

    5、策略模式的应用场景

    一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中

    一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入它们各自的策略类中以代替这些条件语句

    系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时

    系统要求使用算法的客户不应该知道其操作的数据时,可使用策略模式来隐藏与算法相关的数据结构

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

    到此,关于“Java的策略模式用代码怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Java的策略模式用代码怎么实现

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

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

    猜你喜欢
    • Java的策略模式用代码怎么实现
      这篇文章主要介绍“Java的策略模式用代码怎么实现”,在日常操作中,相信很多人在Java的策略模式用代码怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的策略模式用代码怎么实现”的疑惑有所帮助!...
      99+
      2023-06-29
    • Java策略模式怎么实现
      这篇文章主要介绍“Java策略模式怎么实现”,在日常操作中,相信很多人在Java策略模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java策略模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-06-02
    • java策略设计模式怎么实现
      在Java中实现策略设计模式,可以按照如下步骤进行:1. 定义一个策略接口(或者抽象类),该接口包含多个具体策略类共同的方法。2. ...
      99+
      2023-08-31
      java
    • java设计模式之策略模式怎么实现
      这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,...
      99+
      2023-05-31
      java
    • java策略模式如何实现
      本篇内容介绍了“java策略模式如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 刘备要到江东娶老婆了,走之前诸葛亮给赵云(...
      99+
      2023-06-19
    • java策略模式怎么应用
      策略模式是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。这样就可以使算法的变化独立于使用算法的...
      99+
      2023-08-31
      java
    • 怎么实现php策略模式
      小编给大家分享一下怎么实现php策略模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 策略模式:就是把算法和对象分离...
      99+
      2024-04-02
    • C++中的策略模式怎么实现
      本文小编为大家详细介绍“C++中的策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。策略模式主要解决在有多种算法相似的情况下,...
      99+
      2023-07-05
    • 怎样用Javascript实现策略模式
      目录概述代码实现总结概述 策略模式是JavaScript设计模式中行为型的设计模式; 定义: 定义一系列算法,并将这些算法各自封装成策略类(方法),然后将不变的部分和变化的部分分离开...
      99+
      2024-04-02
    • Java中如何实现策略模式
      这篇文章给大家分享的是有关Java中如何实现策略模式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这里设计了一个有关足球的场景,在进攻当中暂分为传球和射门两个动作。最开始你可能会这样想,设计一个抽象类(Attac...
      99+
      2023-06-17
    • Java策略模式取代if else
      别再大量的if else了, 代码太简陋了, 可读性太差了. 策略模式的定义 .... 简单来说 每个模块相互独立 互不影响 提高代码的可扩展性 ! 举栗子, 如下烂代码 if ...
      99+
      2024-04-02
    • Java中怎么用策略模式实现条件判断
      本文小编为大家详细介绍“Java中怎么用策略模式实现条件判断”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中怎么用策略模式实现条件判断”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。定义策略模式定义了一系...
      99+
      2023-06-29
    • JavaScript中怎么实现策略模式
      今天就跟大家聊聊有关JavaScript中怎么实现策略模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。策略模式:定义了一系列家族算法,并对每一种算...
      99+
      2024-04-02
    • Android中怎么实现策略模式
      Android中怎么实现策略模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。策略模式一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。简单来说,只要你写过...
      99+
      2023-05-30
      android
    • PHP 设计模式代码复用策略
      php 代码复用策略包括:继承:子类继承父类属性和方法。组合:类包含其他类或对象的实例。抽象类:提供部分实现,定义需实现方法。接口:定义方法,不需实现。 PHP 设计模式:代码复用策略...
      99+
      2024-05-07
      php 代码复用
    • Java行为型设计模式之策略模式怎么实现
      本文小编为大家详细介绍“Java行为型设计模式之策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java行为型设计模式之策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.策略设计模...
      99+
      2023-07-04
    • C#实现策略模式
      场景:有一个喜欢吃饺子,他有三种不同的方式去吃,蒸饺子,煮饺子,煎饺子,想要用策略模式来设计这个场景,怎么弄? 1.复习简单工厂模式 具体的代码: EatMethod.cs pub...
      99+
      2024-04-02
    • Java设计模式中的策略模式如何实现
      这篇文章主要介绍了Java设计模式中的策略模式如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式中的策略模式如何实现文章都会有所收获,下面我们一起来看看吧。1 概述在平时开发中,往往会遇到这...
      99+
      2023-06-30
    • javascript设计模式中的策略模式怎么实现
      这篇文章主要讲解了“javascript设计模式中的策略模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript设计模式中的策略模式怎么实现”吧!一. 认识策略模式策略...
      99+
      2023-06-26
    • Java怎么优雅的使用策略模式
      本篇内容介绍了“Java怎么优雅的使用策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是策略模式策略模式是一种行为型模式,它将对象...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作