适配器模式
适配器模式(别名:包装器):将一个类的接口装化成客户希望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
概述
比如A型螺母可以使用A型螺丝,B型螺母可以使用B型螺丝,现在需要在A型螺母上使用B型螺丝,这时必须使用适配器。
模式的结构
目标(Target):一个接口,该接口是客户想使用的接口
被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类
适配器(Adapter):一个类,该类实现了目标接口并包含被适配者的引用。

模式的使用
一个两孔插座对应电视机插头,一个三孔插座对应洗衣机插头。现在我们想使用新的三孔插座来使用电视机和洗衣机。
目标(Target):TreeOutlet.java
/**
* 目标
*/
public interface TreeOutlet {
public abstract void connect();
}
被适配者:TwoOutlet.java
/**
* 被适配者
*/
public interface TwoOutlet {
public abstract void connect();
}
适配器:TreeOutletAdapter.java
/**
* 适配器
*/
public class TreeOutletAdapter implements TreeOutlet{
TwoOutlet outlet;
TreeOutletAdapter(TwoOutlet outlet){
this.outlet=outlet;
}
public void connect(){
outlet.connect();
}
}
程序应用
洗衣机类
/**
* 洗衣机
*/
public class Wash implements TreeOutlet{
String name;
Wash(){
name="骆驼牌洗衣机";
}
Wash(String name){
this.name=name;
}
public void connect(){
turnOn();
}
public void turnOn(){
System.out.println(name+"开始洗衣服");
}
}
电视机类
/**
* 电视机
*/
public class TV implements TwoOutlet{
String name;
TV(){
name="熊猫牌电视机";
}
TV(String name){
this.name=name;
}
public void connect(){
turnOn();
}
public void turnOn(){
System.out.println(name+"开始播放节目");
}
}
应用
/**
* 应用程序
*/
public class Application {
public static void main(String[] args){
//目标接口,三孔插座
TreeOutlet outlet;
Wash wash = new Wash();
outlet = wash;
//洗衣机使用三孔插座
outlet.connect();
TV tv = new TV();
//把电视插在适配器上适配器
TreeOutletAdapter adapter = new TreeOutletAdapter(tv);
//把适配器插在三孔插座上
outlet = adapter;
//电视接通三孔插座
adapter.connect();
}
}
适配器模式的优点
- 目标和被适配者完全解耦合
- 满足“开-闭原则”。当添加一个实现Adaptee接口的新类时,不必要修改Adapter,Adapter就能对这个新类的实例进行适配。
适配器的使用场景
一个程序想使用已经存在的类,但该类所实现的接口与当前程序所使用的接口不一致。
联系方式:wuchaodzxx@126.com

浙公网安备 33010602011771号