您的位置:首页 > 其它

设计模式学习笔记之适配器模式

2016-10-10 00:14 260 查看
<span style="font-size:18px;">/**
* 目标(Target)
* @author zhenyonghe
*eg.用户已有一个两相的插座,但最近用户又有了一个新的三相插座。用户现在
*已经有一台洗衣机和一台电视机,洗衣机按着三相插座的标准配有三相插头,
*而电视机按着两相插座的标准配有两相插头。现在用户想用新的三相插座来使
*用洗衣机和电视机(即使用适配器模式使得两个实例都可以使用三相插排)
*/
public interface ThreeElectricOutlet {
public void connectElectricCurrent();
}
</span>
/**
* 被适配者(Adaptee)
* @author zhenyonghe
*
*/
public interface TwoElectricOutlet {
public void connectElectricCurrent();
}
/**
* 适配器(Adapter)
* @author zhenyonghe
*适配器模式(包装器):将一个类的接口转换成客户希望的另外一个接口。
*Adapter模式使得原本由于不兼容二不能一起工作的那些类可以一起工作。
*
*这个适配器实现了目标接口并包含有被适配者的引用。
*/
public class ThreeElectricAdapter implements ThreeElectricOutlet{
private TwoElectricOutlet outlet;
public ThreeElectricAdapter(TwoElectricOutlet outlet) {
this.outlet=outlet;
}
@Override
public void connectElectricCurrent() {
outlet.connectElectricCurrent();
}

}
public class AdapterApp {
public static void main(String[] args) {
ThreeElectricOutlet outlet;
Wash wash=new Wash();
outlet=wash;
System.out.println("使用三相插座接通电流:");
outlet.connectElectricCurrent();
TV tv=new TV();
//适配
ThreeElectricAdapter adapter=new ThreeElectricAdapter(tv);
outlet=adapter;
System.out.println("使用三相插座接通电流:");
outlet.connectElectricCurrent();
}
}
//使用三相插座的洗衣机
class Wash implements ThreeElectricOutlet{
private String name;
public Wash() {
name="黄河洗衣机";
}
public Wash(String s){
name=s;
}
@Override
public void connectElectricCurrent() {
turnOn();
}
public void turnOn(){
System.out.println(name+"开始洗衣物。");
}
}
//使用两相插座的电视机
class TV implements TwoElectricOutlet{
private String name;
public TV(){
name="长江电视机";
}
public TV(String s){
name=s;
}
@Override
public void connectElectricCurrent() {
turnOn();
}
public void turnOn(){
System.out.println(name+"开始播放节目。");
}
}
/*
• 目标(Target)和被适配者(Adaptee)是完全解耦的关系。通过适配器联系,实现目标接口,包含被适配者实例引用。
• 适配器模式满足“开-闭原则”。当添加一个实现Adaptee接口的新类时,不必修改Adapter,
Adapter就能对这个新类的实例进行适配
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: