网上如何建平台网站/设计公司排名
策略模式的简介
在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。
策略模式与其他设计模式有一些明显的区别。与模板方法模式相比,策略模式强调算法的灵活性,允许在运行时切换不同的策略。与状态模式相比,策略模式更注重不同算法之间的替换性,而非状态的内部转换。
策略模式的结构
- 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
- 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
- 环境(Context)类:持有一个策略类的引用,最终给客户端调用
策略模式的优缺点
优点:
- 算法可以自由切换。
- 避免使用多重条件判断。
- 扩展性良好
缺点:
- 策略类会增多。
- 所有策略类都需要对外暴露。
策略模式的使用场景
一个对象,其行为有些固定不变,有些又容易变化。对于这些容易变化的行为,我们不希望将其实现绑定在对象中,而希望能够动态地针对不同场景产生不同应对的策略。 这时就要用到策略模式,就是为了应对对象中复杂多变的行为而产生的:
- 系统有很多类,而他们的区别仅在于行为不同
- 一个系统需要动态地在几种算法中选择一种
直接代码理解
//抽象策略(Strategy)类
//创建购买汽车策略接口
public interface CarStrategy {public void buyCar();}//具体策略(Concrete Strategy)类
//创建购买奔驰车类,实现CarStrategy接口。
public class BcCar implements CarStrategy {@Overridepublic void buyCar() {System.out.println("欢迎购买奔驰E300L。。。。。。");}}//创建购买宝马车类,实现CarStrategy接口。
public class BmwCar implements CarStrategy {@Overridepublic void buyCar() {System.out.println("欢迎购买宝马530Li。。。。。。");}}//创建购买奥迪车类,实现CarStrategy接口。
public class AudiCar implements CarStrategy {@Overridepublic void buyCar() {System.out.println("欢迎购买奥迪A6L。。。。。。");}}
//环境(Context)类
//创建汽车环境类。
public class CarContext {private CarStrategy carStrategy;public CarContext(CarStrategy carStrategy){this.carStrategy = carStrategy;}public void buyCarStrategy(){carStrategy.buyCar();}}//Test@Testpublic void testStrategy(){// 宝马车CarContext bmwCarContext = new CarContext(new BmwCar());bmwCarContext1.buyCarStrategy();// 奔驰车CarContext bcCarContext = new CarContext(new BcCar());bcCarContext.buyCarStrategy();// 奥迪车CarContext audiCarContext = new CarContext(new AudiCar());audiCarContext.buyCarStrategy();}
我觉得这个模式比较好理解,也就是用来解决在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
相关文章:

策略模式(常用)
策略模式的简介 在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,…...

Express中使用Swagger
Swagger Swagger 是一种规范,用于描述 API 的结构,功能和参数。使用 Swagger 可以提供清晰的可视化 API 文档,可用于 API 交互的文档驱动开发,以及 API 的自动化测试和集成。 使用 npm 或 yarn 下载。 npm install swagger-jsdo…...

【C++】单一职责模式
目录 一、简介1. 含义2. 特点 二、实现1. 将类拆分成多个类2. 使用命名空间(Namespace)3. 使用组合而不是继承 三、总结如果这篇文章对你有所帮助,渴望获得你的一个点赞! 一、简介 1. 含义 在面向对象设计中,单一职责…...

GPT4-隐者地址
网址 https://evo.ninja/测试是否是GPT4 https://blog.csdn.net/fyfugoyfa/article/details/130254735...

教师考编需要什么条件
教师考编,了解考编需要什么条件是非常重要的。接下来,我来介绍几点教师考编的条件。 需要具备相应的学历背景。一般来说,考编需要具备本科或以上学历,并且所学专业与所报考的岗位相关。在某些特殊情况下,如报考幼儿园教…...

刘家窑中医医院鲁卫星主任:冬季守护心脑血管,为社区居民送去健康关爱
随着冬季的来临,气温逐渐降低,心脑血管疾病的风险也随之增加。为了提高公众对心脑血管疾病的认知和预防意识,北京刘家窑中医医院于近日成功举办了冬季守护心脑血管公益义诊活动。 本次义诊活动主要针对社区居民中的中老年人,特别是…...

专家级定位咨询:打造不可复制的市场地位
在这个快速变化的商业环境中,每个品牌都渴望在市场中占据一个独一无二的位置。但是,真正实现这一点并非易事。这就是为什么专家级定位咨询如此重要:它不仅帮助品牌发现其独特之处,还能指导它们如何有效地利用这一优势来在市场中脱…...

为什么说代码注释是程序员必备的技能?
代码注释是对代码中的特定部分或整体功能的解释和说明。注释添加在代码中,是给程序员看的,当系统运行程序,读取注释时会越过不执行。随着技术的发展,现在具有百万行代码的程序已经很常见了,在这样一个大型的代码中&…...

日期——年月日星期时间封装和年月日时间封装
年月日星期时间 function nowDate(time) {var getTime new Date().getTime(); //获取到当前时间戳var time new Date(getTime); //创建一个日期对象var year time.getFullYear(); // 年let wk new Date().getDay()var month (time.getMonth() 1).toString().padStart(2, …...

RK3568全国产化多网口板卡带poe供电,支持鸿蒙麒麟系统
信迈XM-3568-01主板采用瑞芯微RK3568四核Cortex-A55 处理器,主频最高可达2.0GHz,效能有大幅提升最高可配8GB内存容量,频率高达1600MHz;支持全链路ECC,让数据更安全可靠配置双千兆自适应RJ45以太网口,并扩展…...

UI卡顿问题
1、 监测卡顿的方式 a、Xcode 层级关系是否有异常 b、 instruments 的Animation Hitch工具检测:碰到问题,录制完了无数据(用iphone7录制有数据的,iphne14录制无数据?) 2、可能导致的卡顿的原因 a、 直播广…...

Linux操作系统的ECS云服务器上搭建WordPress网站教程
WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教程介绍如何在Linux操作系统的ECS实例上搭建WordPress网站。 前提条件 已创建Linux操作系统的ECS实例,并且手动部署LNMP环境…...

【Linux】多线程相关问题
判断题 不论是系统支持线程还是用户级线程,其切换都需要内核的支持(F) 用户态线程的切换在用户态实现,不需要内核支持。 线程包含CPU现场,可以独立执行程序(F) 线程包含cpu现场,但是…...

GPS北斗卫星时空信号安全防护装置(授时)介绍
GPS北斗卫星时空信号安全防护装置(授时)介绍 GPS北斗卫星时空信号安全防护装置(授时)介绍 当前,我国电力系统普遍采用北斗卫星或者GPS卫星授时来实现时间同步,但不加防护的授时装置存在卫星信号被干扰或欺…...

redis:一、面试题常见分类+缓存穿透的定义、解决方案、布隆过滤器的原理和误判现象、面试回答模板
redis面试题常见分类 缓存穿透 定义 缓存穿透是一种现象,引发这种现象的原因大概率是遭到了恶意攻击。具体就是查询一个一定不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致这个数据的每次请求都需要查DB,数据库压力…...

智慧公交:提高城市出行效率的数字化之路
随着城市化进程的不断加速,公共交通成为人们日常出行的主要方式之一。为了提高公共交通的效率和服务质量,智慧公交应运而生。智慧公交是一种基于物联网、大数据、人工智能等技术,对公共交通进行数字化、智能化改造的新型公共交通系统。 以此为…...

Linux - 内存 - memblock 分配器
说明 memblock是Linux内核启动早期用于管理物理内存的机制,在伙伴系统(Buddy System)接管内存管理之前为系统提供物理内存分配、释放等功能。相对于伙伴系统,memblock功能和实现较为简单。本文基于:linux_5.10 arm64平…...

SQL、Jdbc、JdbcTemplate、Mybatics
数据库:查询(show、select)、创建(create)、使用(use)、删除(drop)数据库 表:创建(【字段】约束、数据类型)、查询、修改(alter *add)、删除 DML:增加(inse…...

四六级高频词组8
目录 词组 其他链接 词组 301. in fashion(stylish, most modern)时兴,流行 302. after the fashion (of) 依照… 303. find fault with(complain about;criticize)找…...

fastapi-amis-admin快速创建一个后台管理系统增加音乐管理功能(3)
感觉为了实现maui的效果。准备了一个后端及restful项目 ,如同想吃鱼就健个鲁塘一下,但还是写一下吧。 fastapi_amis_admin 是一个功能强大的框架,旨在帮助开发者在使用 FastAPI 进行 web 开发时,能够快速创建一个高效且易于管理的…...

全球化需要先搬离中国?中国公司出海不应失去“模式自信”
中国企业出海近期热闹非凡,其中以短剧为代表的文化内容产业和跨境电商产业都吸引了大量关注。例如亚马逊在12月12日公布一组最新数据,亚马逊过去一年销售额超过1000万美金的中国卖家数量,同比增长接近30%。中国跨境电商平台在刚刚过去的“黑五…...

三大维度解码剑南春“高质量发展”丨年度盘点
执笔 | 洪大大 编辑 | 扬 灵 2023年即将画上句点,当我们回首这一年为行业带来惊喜的品牌,剑南春是其中之一。 回顾剑南春今年一整年的动作,从新品频发到双节(618、双11)热销,从全国巡展到荣誉满载&…...

外包干了3个月,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现
0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限&#…...

Salesforce×阿里云,影响几何?
实际上,从这个视角来看,Salesforce和阿里云的合作也恰在成为着这个市场的一个新催化剂。“期待Salesforce能给中国市场带来一些新的增量,包括对合作伙伴的态度,对产品的态度等等。”一位CRM相关人士告诉我们。 那么,阿…...

Qt对excel操作
Qt库中自带对excel操作的模块QAxObject,QAxObject是Qt提供给程序员从代码中访问Office的对象类,其本质上是一个面向微软操作系统的COM接口。 QAxObject将所有Office的工作簿、表格、文档等都作为其子对象,程序员通过调用querySubObject()这个…...

每日一练 | 华为认证真题练习Day148
1、关于RSTP协议提供的保护功能说法正确的有?(多选) A. Root保护功能只能在指定端口上配置生效 B. 环路保护功能只能在根端口或Alternate端口上配置生效 C. 启用防TC— BPDU报文攻击功能后,可以避免频繁的删除HAC地址表项 D. 交换设备上…...

ES6学习(二):解构赋值
前言 解构赋值是ES6中新提出的语法,简单并且实用,数组和对象都可以使用 数组解构赋值 规则 1.其实是按照顺序一一匹配的,就像排队领取物资一样,你领到什么就是什么,没有挑的份,你排的晚了什么都没领到,那就是undifined。 2.如果给分配的是一个数组,那可以在命名时外部嵌套…...

kubebuilder开发operator
安装kubebuilder前 需要有kubernetes环境和golang环境 官网:https://go.kubebuilder.io/ 安装kubebuilder #下载 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加权限 chmod x kubebuilder #放到环境变量里 mv k…...

docker中启动ES报错:AccessDeniedException: /usr/share/elasticsearch/data/nodes
一、K8S部署的elasticsearch 6.8版本 数据持久化到本地磁盘 今天做elasticsearch数据迁移,直接 SCP拷贝至另外一台服务器 原服务器处理好后拷贝回来,然后启动elasticsearch报错 {"type": "server", "timestamp": "2…...