图解设计模式(5) 适配器模式

一、适用场景

     如生活中键盘有USB接口的和ps/2接口的。我们手上有一个ps/2接口的键盘但笔记本电脑只有USB接口,我们只要找一个接口转换器就能让键盘在笔记本电脑上使用了。

图解设计模式(5)  适配器模式      图解设计模式(5)  适配器模式    图解设计模式(5)  适配器模式   图解设计模式(5)  适配器模式图解设计模式(5)  适配器模式

    适配器模式是将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能相互调用的类能够一起工作。

二、实现

    适配器的实现需要3个构件:

  •     目标接口 (Target, 即USB接口)                                                
  •     需要适配的类(Adaptee, 即源接口 ps/2)
  •     适配器(Adapter, 即转换器)

      图解设计模式(5)  适配器模式

    我们以ps/2到USB接口适配器为例,来实现一个适配器模式的例子。

    1. 先定义USB接口,指定功能

public interface USB {
	public void typeWords();
}

   2. 定义Adapter,去Implements USB接口

public class Adapter implements USB {
	private Ps2KeyBoard keyboard;
	
	public Adapter(Ps2KeyBoard keyboard) {
		this.keyboard = keyboard;
	}

	@Override
	public void typeWords() {
		keyboard.typeWords();
	}
}

  3. Adapter用到了Ps2KeyBoard类,也就是真正干活的部分,要创建这个类,并在指定接口中调用Ps2KeyBoard对象的打字功能。

public class Ps2KeyBoard {
	public void typeWords(){
		System.out.println("ps2keyboard is typing words.");
	}
}

4. Client调用这个Adapter, 在Adapter中传入Ps2KeyBoard对象用来干活,就通过Adapter实现了用Ps2键盘打字的功能。

public class Client {
	public void typeWords(USB usb){
		usb.typeWords();
	}

	public static void main(String[] args) {
		Client client = new Client();
		client.typeWords(new Adapter(new Ps2KeyBoard()));
	}
}

   调用结果

图解设计模式(5)  适配器模式

上一篇:php – 适配器和依赖注入


下一篇:android – Picasso和适配器与viewHolder