适配器模式

时间:2022-04-26
本文章向大家介绍适配器模式,主要内容包括优势、缺点、适配器 装饰者 外观模式的不同:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适用场景:

1、已经存在的类的接口不符合我们的需求;

2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;

3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。

UML图:

适配器的意义在于,就是为了将已存在的东西(接口)转换成适合我们的需要、能被我们所利用。非常形象的比喻:就像生活中的手机充电器,电脑的电源适配器一样。适配器就行Client和Target的中间件。

代码实现:

普通接口

<span style="font-size:12px;">public class ConcreteTarget implements Target{

	@Override
	public void request() {
		System.out.println("普通类 ...");
	}	
}
//目标接口
	interface Target {
		public void request();
	}</span><span style="font-size: 14px;">
</span>

特殊接口:

<span style="font-size:12px;">public class Adapter {
	public void specificAdapter() {
		System.out.println("适配器模式特殊接口...");
	}
}</span>

所以我们要实现普通和特殊的功能,

class Adapter extends Adaptee implements Target{
	public void request() {
		super.specificRequest();
	}
}

测试

public class Client {
	public static void main(String[] args) {
		// 使用普通功能类
		Target concreteTarget = new ConcreteTarget();
		concreteTarget.request();
		
		// 使用特殊功能类,即适配类
		Target adapter = new Adapter();
		adapter.request();
	}
}

小结

优势

  1. 使用对象组合的方式,用修改的接口来包装适配者
  2. 被适配者的任何子类也可以搭配适配器使用
  3. 个人觉得使用适配器最大的好处是 不需要修改客户端以及被适配者的代码。

缺点

  1. 需要实现所有的方法去完成适配,如果目标非常大,那么工作量也比较大。

NOTE:之前提到的都是 对象适配器,另外还有一种叫做 类适配器,不过类适配器需要多重继承去实现(Adapter需要继承Target和Adaptee),而不是组合的方式去实现。

适配器 装饰者 外观模式的不同:

适配器是:将一个接口转成另一个接口 装饰者是:不改变接口,但加入新的责任 外观模式是:让接口更简单