结构型模式 - Adapter(适配器)模式

定义:

将一个类的接口转换成客户端期望的另一个接口。适配器模式可以消除由于接口不匹配所造成的类兼容性问题。

 

简单的讲就是客户期望调用我们已存的代码功能,但客户已经定义好了自己的接口标准,为了使我们已有的代码能适用客户的接口,所以需要用到适配器模式。

 

该模式定义的角色有一下三种:

  • Target:使用者所期待得到的接口
  • Adaptee:具体调用类中的方法
  • Adapter:将原有接口转换成Target所描述的接口

适配器模式主要以两种方式实现:

  • 类适配模式
  • 对象适配器模式

 

举个生活中常见的例子: 为手机充电。

手机需要电但无法直接从电源上获得(这里忽略带交流电源的山寨手机),所以有了充电器这个适配器,来适配手机与电源的接口,从而能正常充电。

 

1.类适配器

Target(手机充电接口):

public interface Target {
	public void electricize();
}
 

Adaptee(电源):

public class Adaptee {
	public void getElectricity() {
		System.out.println("获取电流......");
	}
}

 Adapter(适配器):

public class AdapterClass extends Adaptee implements Target{
	public void electricize() {
		this.getElectricity();
	}
}

 Test:

public class Test {
	public static void main(String args[]) {
		AdapterClass adapterClass = new AdapterClass();
		adapterClass.electricize();
	}
}

 2.对象适配器

更换Adapter代码为以下:

public class AdapterObject implements Target{
	
	private Adaptee adaptee;
	
	public AdapterObject(Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	
	public void electricize() {
		adaptee.getElectricity();
	}
}

 Test:

public class Test {
	public static void main(String args[]) {
		AdapterObject adapterObject = new AdapterObject(new Adaptee());
		adapterObject.electricize();
	}
}

 

类适配器与对象适配器:

整体看类适配器是基于集成的概念,而对象适配器更类似于一种组合的概念。

 

对象适配器的一些应用场景:

当客户无法给出明确接口或客户提出的接口为抽象类时。

客户接口:

public abstract class AbstractTarget {
	abstract public void electricize();
}

 适配器:

public class AdapterObject extends AbstractTarget {

	private Adaptee adaptee;

	public AdapterObject(Adaptee adaptee) {
		this.adaptee = adaptee;
	}

	@Override
	public void electricize() {
		adaptee.getElectricity();
	}

}
 

 

你可能感兴趣的:(生活)