设计模式---适配器模式

适配器模式解析

定义

适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。简单说就是将不同的接口通过封装成统一的API,让原本接口不兼容的类可以兼容。

适配器模式

分类:
  • 类适配器模式
  • 对象适配器模式
  • 接口适配器模式
角色
  • Target适配目标 : 该角色定义把其他类转换为何种接口,也就是我们的期望接口。上例中的适配目标就是个公司的控制玩具张嘴和闭嘴的接口。
  • Adaptee被适配者 :就是需要被适配的接口。上例中的被适配者就是Toy接口。
  • Adapter适配器:其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。上例中的为了满足各公司的需求就是实现的适配器。

现在要实现这样一个功能:将220V的电压转成手机能使用的5V电压

类适配器

被适配的类:

public class Voltage220V {
	//输出220V的电压
	public int output220V() {
		int src = 220;
		System.out.println("电压=" + src + "伏");
		return src;
	}
}

要适配的接口:

public interface IVoltage5V {
	public int output5V();
}

适配器类:

public class VoltageAdapter extends Voltage220V implements IVoltage5V {
	@Override
	public int output5V() {
		//获取到220V电压
		int srcV = output220V();
		int dstV = srcV / 44 ; //转成 5v
		return dstV;
	}
}

使用:

public class Phone {
	//充电
	public void charging(IVoltage5V iVoltage5V) {
		if(iVoltage5V.output5V() == 5) {
			System.out.println("电压为5V, 可以充电~~");
		} else if (iVoltage5V.output5V() > 5) {
			System.out.println("电压大于5V, 不能充电~~");
		}
	}
}
public static void main(String[] args) {
	Phone phone = new Phone();
	phone.charging(new VoltageAdapter());
}

优缺点:

  • 由于适配器类继承了被适配的类,它就可以根据需求重写被适配类中的方法,使得适配器更加灵活
  • 但是被适配器类的方法在适配器类中暴露出来,增加了使用成本
  • 也正是因为适配器类继承了被适配的类,违背了合成复用原则,该原则建议尽量使用合成/聚合的方式,而不是使用继承

下面通过聚合的方式,改造类适配器的写法为对象适配器

对象适配器

被适配的类、要适配的接口、使用类都和类适配器模式写法相同

适配器类写法:

public class VoltageAdapter  implements IVoltage5V {

	private Voltage220V voltage220V; // 关联关系-聚合
	
	//通过构造器,传入一个 Voltage220V 实例
	public VoltageAdapter(Voltage220V voltage220v) {
		
		this.voltage220V = voltage220v;
	}

	@Override
	public int output5V() {
		
		int dst = 0;
		if(null != voltage220V) {
			int src = voltage220V.output220V();//获取220V 电压
			System.out.println("使用对象适配器,进行适配~~");
			dst = src / 44;
			System.out.println("适配完成,输出的电压为=" + dst);
		}
		
		return dst;
	}
}
接口适配器

当不需要全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以有选择地覆盖父类的某些方法来实现需求。适用于一个接口不想使用其他所有的方法的情况。

比如Interface4这个接口有四个接口方法,但是我们只需要使用这个m1()方法,则可以先设计一个抽象类AbsAdapter 默认实现该接口的所有方法

public interface Interface4 {
	public void m1();
	public void m2();
	public void m3();
	public void m4();
}
//在AbsAdapter 我们将 Interface4 的方法进行默认实现
public abstract class AbsAdapter implements Interface4 {

	//默认实现
	public void m1() {

	}

	public void m2() {

	}

	public void m3() {

	}

	public void m4() {

	}
}

这个匿名内部类就是AbsAdapter的具体实现类,只重写我们需要的方法

new AbsAdapter(){
	@Override
	public void m1(){
		//具体实现
	}
}
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值