开发者社区> wuyudong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

java设计模式6--适配器模式(Adapter )

简介:
+关注继续查看

适配器模式(别名:包装器)

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

概述

适配器模式是将一个类的接口(被适配者)转换成客户希望的另外一个接口(目标)的成熟模式,该模式中涉及有目标、被适配者和适配器。适配器模式的关键是建立一个适配器,这个适配器实现了目标接口并包含有被适配者的引用。

适用性

1.你想使用一个已经存在的类,而它的接口不符合你的需求。

2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

参与者

1.Target 定义Client使用的与特定领域相关的接口。

2.Client 与符合Target接口的对象协同。

3.Adaptee 定义一个已经存在的接口,这个接口需要适配。

4.Adapter 对Adaptee的接口与Target接口进行适配

适配器模式的结构与使用

模式的结构中包括三种角色:

  • 目标(Target)

  • 被适配者(Adaptee)

  • 适配器(Adapter) 

模式的UML类图:

实战部分

用户已有一个两相的插座,但最近用户又有了一个新的三相插座。用户现在已经有一台洗衣机和一台电视机,洗衣机按着三相插座的标准配有三相插头,而电视机按着两相插座的标准配有两相插头。现在用户想用新的三相插座来使用洗衣机和电视机。

1.目标(Target) : ThreeElectricOutlet.java

public interface ThreeElectricOutlet{
    public abstract void connectElectricCurrent(); 
}

2.被适配者(Adaptee): TwoElectricOutlet.java

public interface TwoElectricOutlet{
    public abstract void connectElectricCurrent(); 
 } 

3.适配器(Adapter): TreeElectricAdapter.java

public class TreeElectricAdapter implements ThreeElectricOutlet{
   TwoElectricOutlet outlet;
   TreeElectricAdapter(TwoElectricOutlet outlet){
       this.outlet=outlet;
   }
   public void connectElectricCurrent(){
       outlet.connectElectricCurrent();
   }
}

4.应用 Application.java_1

public class Application{
    public static void main(String args[]){
       ThreeElectricOutlet outlet;      
       Wash wash=new Wash();            
       outlet=wash;                      
       System.out.println("使用三相插座接通电流:");
       outlet.connectElectricCurrent();   
       TV tv=new TV();                    
       TreeElectricAdapter adapter=new TreeElectricAdapter(tv);
       outlet=adapter;                   
       System.out.println("使用三相插座接通电流:");
       outlet.connectElectricCurrent();   
    }
}

4.应用 Application.java_2

class Wash implements ThreeElectricOutlet{ 
    String name;
    Wash(){
       name="黄河洗衣机";
    }
    Wash(String s){
       name=s;
    }
    public void connectElectricCurrent(){
       turnOn();
    }
    public void turnOn(){
       System.out.println(name+"开始洗衣物。");
    }
}

4.应用 Application.java_3

class TV implements TwoElectricOutlet{  
    String name;
    TV(){
       name="长江电视机";
    }
    TV(String s){
       name=s;
    }
    public void connectElectricCurrent(){
       turnOn();
    }
    public void turnOn(){
       System.out.println(name+"开始播放节目。");
    }
}

适配器模式的优点

•目标(Target)和被适配者(Adaptee)是完全解耦的关系。

•适配器模式满足“开-闭原则”。当添加一个实现Adaptee接口的新类时,不必修改Adapter,Adapter就能对这个新类的实例进行适配。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java设计模式之适配器模式
设计模式写写停停,有些在项目中用到了,就提前写了,有些没有用到,但是想完整的更新下来,就都写了。这算是我的设计模式系列的倒数第二篇,因此写完之后也会对我的各大平台上的文章进行一个整理归纳。感谢大家支持。
18 0
Java设计模式之三:适配器模式
1、当我们想要使用一个已经存在的接口,但是它不符合现有的接口数据规范,导致无法直接去访问,此时我们可以创建一个适配器就能间接去访问这个类中的方法; 2、不同系统间进行业务数据对接时,如果想要像调用自身系统接口一样使用其他系统的接口,我们需要通过适配器进行一层转换;
38 0
java适配器模式
java适配器模式
9647 0
Java Adapter Pattern(适配器模式)
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
856 0
《JavaScript设计模式》——10.5 参数适配器
然而当调用它的时候又不知道传递的参数是否完整,如有一些必须参数没有传入,一些参数是有默认值的等等,此时我们通常的做法是用适配器来适配传入的这个参数对象。
1167 0
设计模式:适配器模式(Adapter)
 适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  适配器模式有类适配器模式和对象适配器模式两种不同的形式。
1009 0
+关注
wuyudong
我的个人博客地址:http://wuyudong.com/
203
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载