设计模式之策略模式

1.设计原则

 1.策略模式的设计原则是吧一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后再具体的类中包(上下文对象:context)含这个对象的实例,这样在实例运行中就可以随意调用实现了这个接口的类的行为。

2.主要实现了在环境对象中,引用了策略对象的抽象方法,在运行时,传递具体策略对象,以达到动态调用不同算法的目的

2.策略模式中的对象

(1) 环境对象:该类中实现了对抽象策略中的定义的接口或者抽象类的引用

 (2)   抽象策略对象:将需要的公共方法,在抽象类中进行声明

 (3)具体策略对象:封装了实现同功能的不同算法

3.举例

 商品促销活动中的各种打折算法。

1、8折优惠

 2、200以上7.5折策略

 3、满1000减200 




4、设计原则

1.“开-闭”原则

在策略模式中,可以在客户端程序运行的时候,动态的设置需要的具体策略,而不需要修改算法中的内部结构,每一个算法作为一个独立的实现,更容易扩展。

2.单一职责原则

在策略模式中,每一种策略都是使用的单独的一个类来实现的,因此各种策略之间没有任何的干扰。这种实现,有利于降低模块间的耦合性,能够有效防止一个策略的更改对于其余策略造成影响。

5、相关的设计模式

1.抽象工厂模式:在抽象工厂模式中,可以切换具体具体的工厂或者产品,策略模式中是切换算法

2.状态模式:二者都是采用对象组合的方式,但是状态模式切换的是状态,当状态发生改变时(拥有的状态,前期已经有所规定,而且主要解决系统中判断分支过多的问题),一定会切换委托对象的类实例。而策略模式切换的是算法,算法的相互替换,是由外部环境根据具体情况进行的切换(只需切换的算法,继承规范的策略接口),就可以无限制的扩展和切换

3.模板方式模式:(将已经确定的方法,在父类中是实现,未确定的方法,作为抽象方法,交给子类去实现)
6、使用场合

1.多个类的表现形式不同,需要在运行时动态选择具体要执行的行为的时候

2.当需要在不同的情况下使用不同的策略(比如金额满多少钱,实现某种优惠)

3.当一个类中出现了多种行为,而且在一个操作中使用多个条件分枝判断使用多种行为,也可以使用策略模式将各个条件分支的动作植入到具体策略中实现

7.java中设计的策略模式

ThreadPoolExecutor.


在ThreadPoolExecutor构造函数中

对应的四个策略


在threadPoolExecutor的构造函数中,需要传入一个handler ,此处就涉及到策略模式,根据具体需要传入具体的策略处理方式,来接受对于线程池对拒绝任务的处理

线程池具体使用方法

8.android中涉及的策略模式

android 中的setAdapter(adapter);此处就使用到了策略模式,根据自身需要,传入具体的adapter

eg:

1.ListView 继承于AbListView ,在AbListView中,声明了一个ListAdapter(1.接口形式,继承了adapter接口2.所有自定义的adaper都最终实现了listadapter)变量

在此中

1、listview相当于上下文,通过setAdapter方法,动态绑定具体的策略

2、ListAdapter(baseAdapter)相当于抽象策略方法,我们具体的实现的adapter为具体的策略方法

3、最后通过setAdapter(adapter),来动态改变策略




【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值