Syong : 服务定位器模式

本文深入探讨服务定位器模式(Service Locator Pattern),一种用于解耦软件组件的设计模式,旨在消除类间依赖,通过实例讲解蓝牙鼠标与电池的关系,展示如何通过引入BatteryLocator类实现依赖的接口而非具体实现。

服务定位器模式

Forewrod
今天在看Spring Framework官方文档的时候,看到相关的一段描述:

本章介绍了控制反转(IoC)原理的Spring框架实现。IoC也称为依赖注入(DI)。在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构造或从工厂方法返回后在对象实例上设置的属性来定义其依赖项(即,与它们一起使用的其他对象) 。然后,容器在创建bean时注入那些依赖项。此过程从根本上讲是通过使用类的直接构造或诸如服务定位器模式之类的方法来控制其依赖项的实例化或位置的bean本身的逆过程(因此称为Control Inversion)。

那我就先了解一下服务定位器模式,管中窥豹,多方面了解Spring IoC。
参考链接:MartinFowler.com

What
服务定位器模式(Service Locator Pattern),最主要的用途是:解耦,也就是消除对实现类的依赖。一个类可能依赖另外一个类的接口及实现,但是我们希望的是:只依赖接口,不依赖其实现

How
我们来看一个例子:蓝牙鼠标与电池

//测试类
public class Test {
    public static void main(String []args) {
		BluetoothMouse bm = new BluetoothMouse();
		bm.click();
    }
}

//蓝牙鼠标 与 电池
//蓝牙鼠标
class BluetoothMouse {
	private Battery battery;
	
	public BluetoothMouse() {
		this.battery = new NanfuBattery();
	}
	//鼠标按下
	public void click (){
		//获取电池状态
		boolean batteryStatus = battery.status();
		if ( batteryStatus ) {
			System.out.println("click done");
		} else {
			System.out.println("battery lower power");
		}
	}
}
//电池
interface Battery {
	boolean status();
}
//南孚电池
class NanfuBattery implements Battery{
	@Override
	public boolean status(){
		return true;
	}
}

注意到,初始化BluetoothMouse类时,同时初始化了NanfuBattery类,此时BluetoothMouse依赖NanfuBattery其实现。

如何解耦,我们可以设计一个BatteryLocator类,去new NanfuBattery();,就能实现解耦:

添加的BatteryLocator

class BatteryLocator{
	private static BatteryLocator locator;
	private static Battery battery;
	public static Battery getBattery(){
		return locator.battery;
	}
	public BatteryLocator(Battery battery){
		BatteryLocator.battery = battery;
	}
	public static void load(BatteryLocator locator) {
		BatteryLocator.locator = locator;
	}
	//初始化BatteryLocator并给locator赋值
	static {
		BatteryLocator.load(new BatteryLocator(new NanfuBattery()));
	}
}

BluetoothMouse构造方法改为:

public BluetoothMouse() {
		//修改为BatteryLocator.getBattery();
		this.battery = BatteryLocator.getBattery();
	}

实现BluetoothMouse只依赖NanfuBattery的接口,不依赖其实现。

上面这个还可以继续再优化,请看上面给出的链接:MartinFowler.com

When & Where
慎用

others
spring IoC也用到了这种模式,但很复制。其次,说了Service Locator Pattern是消除依赖的一种设计模式,处了这种以外,还有接口注入/设值方法注入/构造函数注入可以消除依赖。

结束语优秀是一种习惯

Matlab基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率内容概要:本文围绕Matlab在电力系统优化与控制领域的应用展开,重点介绍了基于粒子群优化算法(PSO)和鲁棒MPPT控制器提升光伏并网效率的技术方案。通过Matlab代码实现,结合智能优化算法与先进控制策略,对光伏发电系统的最大功率点跟踪进行优化,有效提高了系统在不同光照条件下的能量转换效率和并网稳定性。同时,文档还涵盖了多种电力系统应用场景,如微电网调度、储能配置、鲁棒控制等,展示了Matlab在科研复现与工程仿真中的强大能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事新能源系统开发的工程师;尤其适合关注光伏并网技术、智能优化算法应用与MPPT控制策略研究的专业人士。; 使用场景及目标:①利用粒子群算法优化光伏系统MPPT控制器参数,提升动态响应速度与稳态精度;②研究鲁棒控制策略在光伏并网系统中的抗干扰能力;③复现已发表的高水平论文(如EI、SCI)中的仿真案例,支撑科研项目与学术写作。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型进行实践操作,重点关注算法实现细节与系统参数设置,同时参考链接中的完整资源下载以获取更多复现实例,加深对优化算法与控制系统设计的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值