设计模式——策略模式(行为型模式)

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个 阅读详情
前言:作为一个非计算机专业的编程爱好者,我们在面试的时候经常会遇到一些设计模式和数据结构的问题,当时我们可能会一脸黑人问号脸。exm?我能实现业务流程就好了,为啥还要懂这些。期初,我也感到不解,问了学计算机专业的同学,结果他们大多也不以为然,觉得没什么用,也只能讲个大概。但渐渐接触了设计模式后,再回去看以前的代码,就会感觉耦合度太高。如果面对修改,那我的代码就会不堪一击,陷入牵一发而动全身的尴尬地步。所以我觉得学习一定的设计模式理念对编写更高质量的代码是有一定的帮助的。
在学习设计模式的时候,我也做也很多笔记,我会在这几天逐渐为大家整理和修改我之前的笔记,希望帮助学习设计模式的同学能够更加轻松的了解和学习设计模式。

点点滴滴的藏,集成了一大仓。——德国谚语


我们十分喜欢玩游戏,记得小学的时候有一款游戏叫“冒险岛”风靡了整个班。其中包含了很多的职业,有魔法师、弓箭手、勇士等等。今天我们来重温一下这款童年的游戏。
现在如果我们是盛大冒险岛的一名工程师,可能需要我们编写游戏里的角色的攻击行为,不同职业的角色具有不同的攻击特点,比如魔法师就是用法杖施法进行攻击,弓箭手就是用弓进行射箭攻击,勇士则是拿着剑进行攻击。来看看我们写的代码:
package com.example.vicky.strategypattern.StrategyPattern;

/**
 * Created by Vicky on 2016/10/23.
 */
//封装不同武器攻击行为
public class Behavior {
    public void attack(int type){
        if (type==1){
            //实现用法杖施法
            System.out.print("用法杖施法");
        }else if (type==2){
            //实现用弓箭射击
            System.out.print("用弓箭射");
        }else if (type==3){
            //实现用剑砍
            System.out.print("用剑砍");
        }
    }
}
当我们要实例化攻击和使用攻击时的代码:
Behavior behavior=new Behavior();
behavior.attack(1);

这样的确实现了我们的业务逻辑,但冒险岛有一个特点就是不断会出新的职业,没个职业又会有各自特点的攻击方式,当之后不断推出海盗、飞侠...等等职业的时候,我们的attack方法中就需要不断的添加 else if 的判断语句,这样就会造成我们的Behavior类的代码越来越多,不易于阅读,也不利于未来的拓展。
所以我们想到了使用策略的设计模式对Behavior这个类进行一定的改造,把不同的攻击方式提取出来,分别封装起来,让它们之间可以相互替换。
接下来我们着手来改造我们的Behavior类,把我们的不同攻击方式提取出来:
package com.example.vicky.strategypattern.StrategyPattern;

/**
 * Created by Vicky on 2016/10/23.
 */
//攻击的接口,为了使不同的攻击方式实现该接口,达到它们之间相互替换的效果
public interface Attack {
    public void attack();
}

接着我们将魔法师的攻击行为从Behavior类中提取出来,实现Attack接口:
package com.example.vicky.strategypattern.StrategyPattern;

import android.util.Log;

/**
 * Created by Vicky on 2016/10/23.
 */
//法师的行为
public class WizardBehvior implements Attack{
    @Override
    public void attack() {
        //实现用法杖施法
        Log.d("YWK","用法杖施法");

    }
}

弓箭手攻击行为:
package com.example.vicky.strategypattern.StrategyPattern;

import android.util.Log;

/**
 * Created by Vicky on 2016/10/23.
 */
//弓箭手的行为
public class ArcherBehavior implements Attack{
    @Override
    public void attack() {
        //实现用弓箭射击
        Log.d("YWK","用弓箭射");
    }
}

勇士的攻击行为:
package com.example.vicky.strategypattern.StrategyPattern;

import android.util.Log;

/**
 * Created by Vicky on 2016/10/23.
 */
//勇士的行为
public class WarriorsBehavior implements Attack{
    @Override
    public void attack() {
        //实现用剑砍
        Log.d("YWK","用剑砍");
    }
}

最后是我们修造后的Behavior类:
package com.example.vicky.strategypattern.StrategyPattern;

/**
 * Created by Vicky on 2016/10/23.
 */
//封装不同武器攻击行为
public class Behavior {
    public Behavior(Attack attackBehavoir){
        attackBehavoir.attack();
    }
}

现在当我们要调用攻击方式时,只需要像下面这样写:
Behavior behavior=new Behavior(new ArcherBehavior());

是不是使用了策略模式,使我们的代码摆脱了大量的if判断语句和恼人的type来指定其中的某一算法来的清晰了很多。
而当我们现在又添加了新的职业海盗的时候,我们只需要海盗的攻击方式,让其实现Attack的接口。在Behavior实例化的时候传入海盗的攻击方式即可。

策略模式核心是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决了在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。



Java行为型设计模式-策略模式 Java策略模式(Strategy Pattern)是一种行为型设计模式,‌它允许你在运行时改变对象的行为,而不改变其结构。这种模式的核心思想是将算法或行为封装在不同的对象中,然后让客户端在运行时选择合适的策略来执行。‌这种模式使得算法可以独立于使用它的客户端变化,‌从而增强了系统的灵活性和可维护性。‌// 定义策略接口综上,策略模式是一种行为型设计模式,‌它允许你在运行时改变对象的行为。‌这种模式的核心思想是将一系列可互换的算法封装成独立的策略类,‌并在运行时根据需要选择使用哪个策略。‌。 阅读详情

相关推荐

无人机芯片模块技术要点分析

恶劣环境下信号稳定性:无人机在恶劣环境下工作时,遥感系统采集的信号往往很不稳定,视频信号处理芯片需要具备强抗干扰能力,能辨别脉冲脉宽为50ns以上、幅度为0V~4.5V的输入信号。这种架构能兼顾强大的运算能力和灵活的接口控制。芯片小型化:麻省理工学院的研究人员已设计出仅20平方毫米的微型芯片,可处理无人机飞行所需的惯性数据和相机图像,为微型无人机的发展奠定了基础。光子集成芯片(PIC) :研究显示,与电子芯片相比,光子计算芯片在延迟、计算容量和能效上都有数量级的提升,有望解决当前无人机系统的计算瓶颈。

YUNZHUO666的博客 1404

设计模式-策略模式(Strategy)

策略模式是一种行为型设计模式,它定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换或独立于使用它的客户而变化。这种类型的设计模式属于行为型模式。当在处理一项业务时,如果有多种处理方式,并且需要再运行时决定使用哪一种具体实现,就会使用策略模式。策略模式的主要组成部分包括抽象策略(Strategy)类、具体策略(Concrete Strategy)类和环境(Context)类。抽象策略类是策略接口,定义了所有支持的算法;具体策略类是实现了抽象策略接口的类,表示每种具体的算法;

miaoyl的博客 5044

单相PWM整流器搭建训练——(一)拓扑原理介绍

单相整流器是一种将交流电转换为直流电的设备,主要由变压器、整流元件和滤波电路组成。变压器将输入的交流电压转换为适合整流的较低电压,整流元件(如二极管)利用其单向导电性将交流电转换为脉动直流电,最后滤波电路去除脉动直流电中的纹波,输出较为平滑的直流电,从而实现交流到直流的转换,广泛应用于各类电源设备中。

DikouNass的博客 1587

设计模式之策略模式详解

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

glass__sky的博客 7481

WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器

本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。

weixin_33717117的博客 307

告别Docker Desktop!Colima在Mac上的5分钟极速安装与配置指南(M1芯片实测)

本文详细介绍了如何在Mac(尤其是M1芯片)上快速安装和配置Colima,作为Docker Desktop的免费替代品。通过优化配置和实战指南,帮助开发者提升容器运行效率,减少资源占用,实现丝滑的开发体验。

weixin_28839601的博客 445

设计模式之策略模式

java程序的设计原则 6大原则: 单一职责:一个类和方法只做一件事。 开闭:对修改关闭,对扩展开发。 里氏替换:子类可扩展新方法,但不可修改父类已有方法(父类已提供了具体实现的方法)。 依赖倒置:依赖于抽象,而非具体实现,即面向接口编程(如方法参数,类属性使用接口声明,这样可接收任何子类)。 接口隔离:使用多个隔离的接口定义抽象,降低耦合。 最少知道/迪米特:降低类之间的依赖,聚合,组合等。 1:策略设计模式 策略设计模式一般使用的场景是,多种可互相替代的同类行为,在具体运行过程中根据不同情况,选择其中

wang0907的博客 8546

WSL中使用VMD图形化界面

【代码】WSL中使用VMD图形化界面。

handsome213的博客 840

设计模式-策略模式

策略模式(strategy pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。

鱼粉大王 8520

uni-app - 刘海屏(Iphone X)底部横杠(——)白色区域块(安全距离处更改颜色)解决方案

场景:因为要做无tabbar页面,所以在配置文件中取消底部导航栏。取消后,iPhoneX(刘海屏)底部就出现如下图所示白色安全区域问题:这个问题,是因为uni-app默认会为iPhoneX(刘海屏)留出安全距离,这个安全距离的背景色就是白色。所以,如果你将页面颜色设置为其他颜色,就会与默认白色冲突。有2个不同的解决方案(原生占位),虽然原理是一样,但使用的场景不同,请根据您的需求来采纳。

🏆 前端领域优质创作者 1万+

基于R语言的PLS算法实现解读

我们使用"pls"包来执行PLS回归,并提供了相应的源代码。在本文中,我们将详细解读基于R语言的PLS算法的实现过程,并提供相应的源代码。PLS算法的实现可以借助R语言中的"pls"包。该包提供了丰富的函数和工具,用于执行PLS回归、PLS-DA(PLS-Discriminant Analysis)和其他相关任务。除了执行PLS回归,"pls"包还提供了其他功能,例如PLS-DA(用于分类问题)和PLS变量选择等。上述代码将基于输入的X值,使用训练好的PLS模型进行预测,并返回预测结果。

TechWhizKid的博客 1046

设计模式详解之策略模式

策略模式是一种应用广泛的行为型模式,核心思想是对算法进行封装,委派给不同对象来管理,本文将着眼于策略模式进行分享。

阿里技术 5815

【Agent从入门到实践】40 容错优化:异常处理、重试机制、降级策略

各位小伙伴,咱们的多Agent框架一路优化到现在,决策快、执行效率高、资源用得省,看似啥都行,但只要一遇到网络波动、工具故障、数据异常调用web_search工具时网络超时,整个检索任务直接失败,写作Agent没数据可用向量库连接异常,向量检索直接崩掉,依赖检索结果的Agent全趴窝单个Agent执行出错,整个并行任务流程直接中断,前功尽弃高并发下部分工具调用失败,框架没有备用方案,只能返回任务失败说白了,咱们之前的框架只有正常执行逻辑,没有异常兜底逻辑。

人工智能AI技术 910

【设计模式精讲】行为型模式之策略模式

策略模式(strategy pattern)的原始定义是:定义一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。其实我们在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【C#设计模式】19.策略模式(Strategy Pattern)【行为型】

1.1 动机(Motivate) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题? 1.2 意图(Intent) 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。       ——《设计模式》GoF .........

星Yeah 的博客 3688

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

设计模式之策略模式(行为型)

一、模式定义 策略模式:定义一系列算法,然后将每一个算法封装起来,并将它们可以互相替换。也就是将一系列算法封装到一系列策略类里面。策略模式是一种对象行为型模式。策略模式符合“开闭原则“ Strategy Pattern: Define a family of algorithms, encapsulate each one, and make them interchangeable. Stra...

Nicky's blog 3450

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

行为型设计模式: 策略模式(Strategy Pattern)

设计模式;行为型模式;行为型设计模式;策略模式(Strategy Pattern): 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 策略模式(Strategy Pattern)属于行为型模式。行为型模式涉及到算法和对象间职责的分配;行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。行为型模式刻划了在运行时难以跟踪的复杂的控制流;它们将你的注意力从控制流转移到对象间的联系方式上来。

智能多媒体 617

设计模式 - 行为型 - 策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它将算法抽象为独立接口,通过封装具体策略类实现算法的动态切换。该模式通过上下文对象调用策略,消除复杂条件分支,提升代码灵活性和扩展性。其核心优势包括解耦算法与业务逻辑、支持新增策略无需修改现有代码,适用于支付方式选择、促销计算等多算法场景。尽管可能增加类数量,但策略模式通过单一职责和开闭原则显著提升系统可维护性。典型实现如电商促销策略的动态切换,结合工厂模式可优化策略管理。

csdn_tom_168的博客 376

行为型设计模式-策略模式(Strategy Pattern)

策略模式:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。

Lifelong learning 1598

C# 设计模式:第十四章:行为型模式 之 策略模式(Strategy Pattern)

在这章中,我们学习了策略模式的基本概念、应用场景、实现方法以及注意事项。策略模式允许你定义一系列算法,并将每个算法封装到独立的类中,使得它们可以互换使用。支付系统:如电子商务网站的支付系统,用户可以选择不同的支付方式(如信用卡、支付宝、微信)。策略模式可以帮助你轻松地切换不同的支付策略,而不需要修改支付系统的其他部分。折扣计算:如电商网站的折扣计算系统,系统可以根据不同的促销活动为用户提供不同的折扣。策略模式可以帮助你轻松地切换不同的折扣策略,而不需要修改折扣计算系统的其他部分。排序算法。

caifox的博客 1158

设计模式 ~ 行为型模式 ~ 策略模式 ~ Strategy Pattern。

设计模式 ~ 行为型模式 ~ 策略模式 ~ Strategy Pattern。

lyfGeek的博客 259

【设计模式】行为型模式—策略模式(Strategy Pattern)(十四)

**策略模式(Strategy Pattern)是当有多种算法且调用和返回方式相似的情况下,仅类型不同时,可以通过该模式将其封装起来,让它们之间可以互相替换。** - `策略模式可以用于改造代码中的if-else逻辑` - **抽象策略角色(Abstract Strategy)**:通常为`接口 或 抽象类`,定义每个策略必须具有的方法和属性。 - **具体策略角色(Concrete Strategy)**:`具体实现抽象策略中的接口`,编写具体的业务逻辑 - **策略上下文角色/环境角色(Context

墩墩分墩 653

Java设计模式 —— 【行为型模式】策略模式(Strategy Pattern) 详解

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

知唔猪的博客 1306

[设计模式] 行为型:策略模式(Strategy Pattern)

文章标题什么是策略模式设计与实现总结 什么是策略模式 策略,就是解决问题的具体方法。针对同一个问题的不同条件,可以有多种不同的解决方法。 比如,外出旅行,可选的出行方式有:汽车(省内旅行)、火车(国内旅行)、飞机(国际旅行)。每一种出行方式都是一种具体的策略,各自都有对应的选择条件。 如果把这个场景用代码表示出来,最容易想到的应该就是用if...else...来实现。但是,这在编程老鸟眼里是有问题的,后期扩展性不佳。 简单解释下为什么扩展性不佳,随着场景的丰富,策略选择条件可能会更复杂,也可能会增加新的策略

不忘初心 方得始终 401

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 策略模式(Strategy) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 策略模式(Strategy) 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

Z 576

【设计模式|行为型】策略模式(Strategy Pattern)

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族(一组算法),分别封装起来,使它们之间可以互相替换,而且算法的变化可以独立于使用它的客户端。DiscountStrategy 是策略接口,PercentageDiscountStrategy 和 FixedAmountDiscountStrategy 是具体的策略实现类,Client 是客户端代码,用来指定折扣策略。2、举例实际应用中的场景实例: 一个常见的场景就是商场打折活动,不同的活动有不同的折扣策略。

zxcyxg123的博客 264
上一篇: 微信小程序入门Demo(石头剪刀布)
下一篇: 设计模式——单例模式(创建型模式)
VikcyWinner
博客等级 码龄11年 12粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值