我眼中的设计模式 ----策略模式

                     作为开篇。有必要说明下。写文章不是我的强行,只是作为一个记录而已

     首先 对于策略模式给一个定义吧!策略模式:定义了算法簇,分别对其进行了封装,他们之间可以互换。这样做的话,可以让算法的变化独立于算法的客户端!

    这里先举一个鸭子的实例。对于一个鸭子,他有很多行为,比如叫,飞行,但不同种类的的鸭子,它有不同的行为。所以可能会有下面这种做法
package com.ssh.exercise;

public class Duck {
	
	
	 public void swim() {
		System.out.println("所有鸭子都会游泳!");
	}
	
	 public void quack(){
		 System.out.println("quack");
	 }
	 
	 public void fly(){
		 System.out.println("fly");
	 }
	 
}

具体的实例去实现覆盖对应的方法,如下面的代码所示:

package com.ssh.exercise;

public class WoodDuck extends Duck{

	@Override
	public void quack() {
		System.out.println("呱呱叫");
	}

	@Override
	public void fly() {
		System.out.println("木头鸭不会叫");
		
	}
	
	

}
但这样做的结果是:为了复用的目的而使用继承,反而效果不佳,一来并不是所有子类都具备超类的行为,代码在多了子类中重复,也很难知道所有鸭子的全部行为,运行时行为不容易改变,改变一个,会造成其他鸭子不想要的改变!

看到这里,你可能会想到把fly,quack从超类中单独出去,定义flyable,quackable的接口,子类来实现。虽然这样的做法,可以解决一部分的问题,但只是从一个噩梦到另外一个噩梦,想想,java是单继承的,如果,在会飞的鸭子里面,飞行动作又有其他变化呢。会不会造成代码无法复用,如果有很多子类,那么去修改那么多子类的飞行或者叫的行为不觉得很麻烦么?
想想开篇的定义,定义算法族,就是把可变化的东西提取出来,封装!

那我们就可以如下做:先定义fly和quack的接口,不同的飞行行为,或者喊叫的行为去实现对应的接口,这样一来对于不同的鸭子,就只要实现行为的实现类就可以了,代码比较简单。我就不贴了。

策略模式的设计原则:找出应用中可能需要变化之处,把他们独立起来,不要和那些不需要变化的代码混合在一起。尽量针对接口编程。不要针对实现编程,多用组合,少用继承



内容概要:本文介绍了一个基于MATLAB实现的多目标粒子群优化算法(MOPSO)在无人机三维路径规划中的应用。该代码实现了完整的路径规划流程,包括模拟数据生成、障碍物随机生成、MOPSO优化求解、帕累托前沿分析、最优路径选择、代理模型训练以及丰富的可视化功能。系统支持用户通过GUI界面设置参数,如粒子数量、迭代次数、路径节点数等,并能一键运行完成路径规划与评估。代码采用模块化设计,包含详细的注释,同时提供了简洁版本,便于理解和二次开发。此外,系统还引入了代理模型(surrogate model)进行性能预测,并通过多种图表对结果进行全面评估。 适合人群:具备一定MATLAB编程基础的科研人员、自动化/控制/航空航天等相关专业的研究生或高年级本科生,以及从事无人机路径规划、智能优化算法研究的工程技术人员。 使用场景及目标:①用于教学演示多目标优化算法(如MOPSO)的基本原理与实现方法;②为无人机三维路径规划提供可复现的仿真平台;③支持对不同参数配置下的路径长度、飞行时间、能耗与安全风险之间的权衡进行分析;④可用于进一步扩展研究,如融合动态环境、多无人机协同等场景。 其他说明:该资源包含两份代码(详细注释版与简洁版),运行结果可通过图形界面直观展示,包括Pareto前沿、收敛曲线、风险热图、路径雷达图等,有助于深入理解优化过程与结果特性。建议使用者结合实际需求调整参数,并利用提供的模型导出功能将最优路径应用于真实系统。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值