设计模式之策略模式

CloudCompare&PCL 体元累加法(树冠体积计算) 文章目录 阅读详情
最近在看一本叫《Head First 设计模式》的书,看完一种设计模式,就来这里写一下学习心得,顺便与大家分享一下。
首先,我们想要构建一个类构建一个很灵活的Duck(鸭子)类,这只鸭子可以不能飞,也可以用翅膀飞,也可以用火箭助推器飞,并且详细的飞属性能够在运行时更改,并且更改不需要改变这个Duck类本身的代码。
一、创建FlyBehavior接口
这时候,我们可以把Duck类中的fly()方法搬出来,搬到一个FlyBehavior的接口中,将fly方法独立出来。接口代码:
package com.yykj;

public interface FlyBehavior {
    void fly();
}
二、创建抽象类Duck
这里,我们先不急着写FlyBehavior的实现类,因为平时开发中,具体fly()方法算法逻辑是经常需要改动的,放到后面写。这里Duck类设成抽象类的原因是,其中调用了fly方法,而且鸭的种类有很多,可以写子类来继承Duck类。
package com.yykj;

abstract public class Duck {

    protected FlyBehavior flyBehavior;//用接口声明变量

    public void performFly(){//调用fly方法
        flyBehavior.fly();
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {//可以使得接口引用的对象在运行中也可以用setter方法改变
        this.flyBehavior = flyBehavior;
    }
}
三、创建FlyBehavior的具体实现类FlyWithWings。
package com.yykj;

public class FlyWithWings implements FlyBehavior{
    //定义各种属性
    private int speed = 10;
    
    @Override
    public void fly() {
        //...算法族
        System.out.println("以" + speed + "速度飞行");
    }
}
这个实现类封装了飞行的算法,使得飞行的具体实现与Duck类分离开来,而且你还可以给一只不能飞的Duck实现一个FlyNoWay类。
四、创建Duck抽象类的具体实现类
package com.yykj;

public class MyDuck extends Duck{

    public MyDuck(){
        flyBehavior = new FlyWithWings();//这里还可以更有弹性
    }
}
五、总结
这个设计模式的核心思想就是
1.针对接口编程,而不是针对实现编程
2.有一个可能比是一个更好,多用组合,少用继承。
3.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。



数字游民产业小报告 · 2025 2025 年全球数字游民约(不同统计口径差异很大,低估法约 4,000 万,高估法 8,000 万),美国来源占比最高。:2025 Q1 约岗位允许一定程度远程;2024 年美国员工至少部分远程(全球 2023 年约 28%)。:到 2025 年,提供数字游民/远程工作签证(媒体口径 50–73 个不等;福布斯 66、Citizen Remote 50+、有机构清单称 73)。:以英国为例,期望未来一年全勤到岗、企业因强制返岗出现离职,说明“灵活/远程”仍是劳动力市场的筹码之一。 阅读详情

相关推荐

海康门禁二次开发实战:用Java实现员工考勤系统的人脸权限管理

本文详细介绍了如何利用Java技术栈进行海康威视门禁系统的二次开发,实现员工考勤系统的人脸权限管理。从开发环境准备、SDK集成到设备连接、人脸数据批量处理,再到权限管理与异常处理,全面解析了海康门禁对接开发的关键步骤和最佳实践,助力企业构建高效、安全的智能考勤系统。

weixin_29191669的博客 262

策略模式笔记

什么情况下使用策略模式? 有很多个类。 这些类的区别只在于某个行为不同。 场景应用举例 购买火车车票时,同样的车位,选择成人票,学生票。 去上班过程选择使用自行车,步行,公交车等。 解决问题 解决将所有算法写在主程序中使用大量的if…else语句。 类之间的区别设计为Behavior接口 将飞这个行为在鸟类中独立出来作为一个区别。 一些鸟能展翅飞翔,一些鸟不能飞。 飞行行为 public interface FlyBehavior { public void fly();

liaojsgtcg的博客 364

使用STM输出互补SPWM波(三相各差120°)

使用STM32输出SPWM波形(三相各差120°)

hello011102的博客 7373

java基础_设计模式_设计基础(小鸭子游戏)

小鸭子游戏,是好多爱好者接触设计模式、认知设计模式概念的一个入门。 每个初学者的理解不同,我加上自己的理解大体是这样的:前提是处理大规模时,假设池塘中有10000头小鸭子,有红头鸭,野鸭子,木头鸭子等等,会叫会游泳,肯定是定义一个父类Duck,拥有这样的基本行为属性;现在要求鸭子中400头,可以飞,该怎么做? 有句话叫:当你处理大规模时,一定要写抽象层次编程。 问题:400只小鸭子可

yezhuAndroid的博客 1375

银河麒麟V10 SP1 x86_64架构下离线部署全栈开发环境:Java8+Mysql5.7+Tomcat8实战指南

本文详细介绍了在银河麒麟V10 SP1 x86_64架构下离线部署全栈开发环境的实战指南,包括Java8、Mysql5.7和Tomcat8的安装与配置。通过步骤详解和常见问题排查,帮助开发者在国产操作系统上高效搭建稳定可靠的开发环境,特别适合政务系统和企业级应用部署。

weixin_29230901的博客 373

android11-修改屏幕显示方向和触摸方向

参数0表示12点钟方向显示参数90表示3点钟方向显示参数180表示6点钟方向显示参数270表示9点钟方向显示。

Paper_Love的博客 2118

设计模式-策略模式(鵝鵞䳘䳗)

策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来,实现同一个接口,让他们之间可以互相替换,让算法的变化独立于使用算法的客户。

有一分热,发一分光。 5935

一文搞懂数据标注

数据标注即通过分类、画框、标注、注释等,对图片、语音、文本等数据进行处理,标记对象的特征,以作为机器学习基础素材的过程。简言之,就是需要给数据做好标注,这样机器就能知道学习哪些内容。

女王の专属领地 9936

极简设计模式 - 策略模式

**策略模式(Strategy Pattern)** 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

不放糖的咖啡 558

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6633

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1753

行为型——策略模式(Strategy)day22

策略模式基本介绍 策略模式(Strategy Patterm) 中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口) ;第三、多用组合/聚合,少用继承(客户通过组合方式使用策略) . 策略模式的原理类图 说明:从上图可以看到,客户context有成员变量strategy或者其他的策略接口,至于需要使用到哪个策略,我们可以在构造器中指定

zero_ko的博客 248

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1180

设计模式之策略模式(Strategy Design Pattern)

模板模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.翻译成中文就是:定义一系列算法(策略),封装每一个算法(策略),并使它们可以互换。使算法(策略)可以独立于使用它的客

xjj1314的专栏 427

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

23种设计模式之策略模式(Strategy Pattern)

本篇文章将23种设计模式中的策略模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式-策略模式-Strategy Pattern

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式的优点包括算法的封装和切换的灵活性,以及算法可独立于使用它的客户端变化。:如果算法的实现非常复杂,或者算法可能会随着时间而变化,策略模式可以帮助管理这种复杂性,使得算法的变化不会影响到使用算法的代码。:在需要根据不同条件动态切换算法的场景中,策略模式可以提供灵活的算法切换机制,例如,根据输入数据的特性选择不同的算法。

wesigj的博客 1455

VB摄像头监控

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

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

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

weixin_45226668的博客 1505

C++设计模式——策略模式(Strategy Pattern)

C++设计模式——策略模式(Strategy Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——策略模式(Strategy Pattern)目录定义实现示例传统的策略模式实现使用函数指针实现策略模式工厂模式和策略模式对比总结参考资料 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式是指定

leonardohaig的博客 4769

设计模式:策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这样,算法的变化不会影响到使用算法的客户。

TechNomad的博客 1260

设计模式之策略模式(DesignPattern of Strategy)

C++版设计模式之策略模式

一路Coding 592

23种设计模式-19策略模式(Strategy Pattern)

策略模式是在开发中最常见的设计模式之一,本文介绍了策略的基本原理及使用场景,以及基于 java 代码的普通实现和基于Spring 的实现案例。

不开心就吃辣 1871

设计模式教程:策略模式(Strategy Pattern)

定义一系列算法,将每个算法封装起来,并让它们可以互换,使得算法的变化独立于使用算法的客户。

遇见伯灵说的博客 977

设计模式之策略模式(Strategy Pattern)

设计模式中有六大原则和二十三设计模式。 其中六大原则分别为:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 二十三设计模式:单例模式、Builder 模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模版方法模式、访问者模式、中介模式、代理模式、组合模式、适配器模式、装饰模式、享元模式、外观模式、桥接模式。

Mr_Four 607

每天一个设计模式之策略模式(Strategy Pattern)

策略模式的适用场景是,当一个系统中只有算法策略变化,而其他都不变,这时候应当将算法隔离开,策略模式就是解决这类问题的模式。

Dive Deep into The Knowledge 468

Java设计模式--策略模式【Strategy Pattern】

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封

CoderLover 541

【设计模式】策略模式(Strategy Pattern)详解

策略模式(Strategy Pattern)是一种行为型设计模式,

qq_59344127的博客 1839
上一篇: Spring事务管理之最实用的注解创建事务【Spring入门】
下一篇: HDU 3165 Trainsorting (DP, LIS)
LiQiyaoo
博客等级 码龄11年 337粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值