Java学习之路5--适配器模式

结构型模式

前几篇设计模式都是属于创建型设计模式,都是写如何创建一个所需的对象。而结构型模式是从程序结构上实现松耦合,扩大整体的类结构。

适配器模式

什么是适配器模式

好比如现实中的充电线,华为用的Type-C接口,而苹果用的是苹果接口,要使苹果手机能用华为充电线的Type-C接口,必须在苹果手机上加装一个适配器,如图: 回到程序中,适配器可以用这样的一张图来表示: 适配器起到了通过调用接口1的方法1,就能调用到接口2的方法2。也就是说,接口1的抽象方法1通过适配器能在接口2的方法2中实现。

适配器模式由什么构成

由上图可知,适配器由目标接口(角色),适配器(角色),源接口(角色)3大部分组成。 目标接口(Target)一般由一个抽象类/接口来实现。 源接口(Adaptee)一般都有接口方法的具体实现。 适配器(Adapter)是核心,一般都是一个具体类。

适配器模式的简单实现

题目:有一个“苹果手机”的程序,它必须通过调用“苹果充电线”接口来进行实现。但是我们只有“安卓充电线”接口是实现了方法的。如何运用适配器模式来让程序充电?

类适配器

通过适配器类的extends源接口类并implements目标接口类进行适配。

Target:

//苹果
public interface Target {
          
   
		void charge() ;
}

Adaptee:

//安卓
public class Adaptee {
          
   
		void charge() {
          
   
			System.out.println("正在充电");
		}
}

Adapter:

//继承Adaptee,实现Target
public class Adapter extends Adaptee implements Target{
          
   
		public void charge() {
          
   
			super.charge();
		}
}

Client:

public class Client {
          
   
	public static void main(String[] args) {
          
   
		// TODO Auto-generated method stub
			Target iphone=new Adapter();
			iphone.charge();
			}
}

输出:

正在充电

对象适配器

在适配器中运用已实现方法的Adaptee对象,进行Target接口的实现。

Target和Adaptee的代码不变。

Adapter:

public class Adapter implements Target{
          
   
		private Adaptee Android=new Adaptee();
		public Adapter(Adaptee Android) {
          
   
			this.Android=Android;
		}
		public void charge() {
          
   
			Android.charge();
		}
}

Client:

public class Client {
          
   
	public static void main(String[] args) {
          
   
			//已有Android线,创建其对象
			Adaptee Android=new Adaptee();
			//“插上适配器”
			Adapter iphone=new Adapter(Android);
			//用适配器充电
			iphone.charge();
	}
}

输出:

正在充电

运用场景

常用于老接口改造,用适配器模式可让他不影响旧版本项目使用,也可让新版本项目适应。 旧的类实现了原有的功能,但是基于扩展性,我们由另外的接口访问。适配器将字节流转换为字符流

经验分享 程序员 微信小程序 职场和发展