设计模式之适配器模式--简单实例分析

适配器模式动机

能够使类和对象结合到一起形成更大的结构。
能够使原来不兼容的事物可以一起工作,这个新的设备称为适配器。

就像我们买的有些平板没有耳机插孔,就需要一个充电器插口转接耳机插口的一个适配器。以前的sd卡无法直接插到电脑上实现直接的文件转储功能,这时候如果有一个读卡器,就能实现sd卡与电脑的连接,让这两个设备能够一起工作,这个读卡器就是一个适配器。


适配器模式定义

适配器模式(Adapter Patter)定义:将一个接口转换成用户希望的另一个接口,适配器模式使接口不兼容的那些类一起工作,其别名为包装器(Wrapper)。

适配器模式结构与分析

适配器模式包含如下角色

1.Target(目标抽象类)
目标抽象类定义客户要用的特定领域的接口,可以是个抽象类接口,也可以是个具体类。

2.Adapter(适配器类)
适配器类可以调用另一个接口,作为一个转换器,对也Adaptee和Target进行适配。适配器Adapter是适配器模式的核心。
类适配器中,它通过实现Target接口并继承Adapter类来使两者产生联系;
对象适配器中,它通过继承Target并关联一个Adapter对象使两者产生联系。

3.Adaptee(适配者类)
适配者即被适配的角色,它定义一个已经存在的接口,这个接口需要适配。适配者类一般是一个具体类,它包含客户希望使用的业务方法。

4.Client(客户类)
在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法。

类适配器结构图

在这里插入图片描述

对象适配器结构图在这里插入图片描述

实例:类适配器

我们想构建一个适配器,让耳机与只有充电器插孔的平板一起工作,也就是说,构建一个充电孔转耳机孔的适配器。

uml图

在这里插入图片描述

代码

AirPlus 类 (Adaptee(适配者类)):
耳机类只有听的方法

public class AirPlus {
	public void listen() {
		System.out.print("听.....");
	}
}

Ipad类(Target(目标抽象类)):
ipad只有充电的方法

public interface Ipad {
	public void chongdian();//平板只有充电器接口
}

IpadAdapter类(Adapter(适配器类)):
当用户使用充电器接口的时候,适配器调用的是调用耳机的方法,实现平板与耳机能够一起工作

public class IpadAdapter extends AirPlus implements Ipad{
	public void chongdian() {
		System.out.print("使用平板");
		super.listen();//调用耳机的听的方法,相当于不同插头的转接
	}
}

Client类:

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AirPlus airplus=new AirPlus();
		Ipad i=new IpadAdapter();
		i.chongdian();
	}

}
运行截图

在这里插入图片描述

实例:对象适配器

uml图

在这里插入图片描述

代码

AirPlus 类(Adaptee(适配者类)):
耳机类只有听的方法

public class AirPlus {
	public void listen() {
		System.out.print("听.....");
	}
}

Ipad类(Target(目标抽象类)):
ipad只有充电的方法

public abstract class Ipad {
	public abstract void chongdian();//平板只有充电器接口
}

IpadAdapter类(Adapter(适配器类)):
当用户使用充电器接口的时候,适配器调用的是调用耳机的方法,实现平板与耳机能够一起工作

public class IpadAdapter extends Ipad{
	private AirPlus airplus;
	public IpadAdapter() {
		airplus=new AirPlus();
	}
	public void chongdian() {
		System.out.print("使用平板");
		airplus.listen();//调用耳机的听的方法,相当于不同插头的转接
	}
}

Client类:

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ipad i=new IpadAdapter();
		i.chongdian();
	}

}
运行截图

在这里插入图片描述

适配器模式扩展

缺省适配器模式

缺省适配器模式是适配器模式的一种变形,但其使用也非常广泛。
缺省适配器模式(Default Adapter Pattern)定义:当不需要全部实现接口提供的方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),n那么该抽象类的子类可以有选择的覆盖父类的某些方法来实现需求。
适用于一个接口不想使用其所有方法的情况,因此也称为单接口适配器模式。

双向适配器

在对象适配器的使用中,如果在适配器中同时包含目标类和适配器的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配器者类中的方法,那么适配器是一个双向适配器。


适配器模式优缺点

适配器模式优点:将目标类和适配器类解耦,增加了类的复用性和透明性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”。

适配器模式缺点
类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类;
对象适配器模式的缺点是很难置换适配者类的方法。


原创不易,如果对您有帮助,点个赞再走吧✧*。٩(ˊᗜˋ*)و✧*。谢谢~

  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nan_black

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值