首页 > 其他 > 详细

设计模式 (适配器模式)

时间:2020-08-26 11:08:13      阅读:78      评论:0      收藏:0      [点我收藏+]

适配器模式

一、简介

适配器模式(Adapter Pattern) 属于结构型模式中的一种,主的目的是兼容性,将某个类的接口转换成客户端期望的另一个接口表示,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。适配器分为两种:类适配器模式、对象适配器模式。

 

二、对象适配器模式

UML 图

技术分享图片

 

 

Target: 目标接口。

Adapter:适配器实现目标接口。

Adaptee:被是适配器,所有的请求都委托给被适配者。

 

案例

1、 定义两个接口,与实现类

// 接口
public interface Duck {
?
    void duck();
?
    void fly();
}
?
// 实现类
public class ADuck implements Duck {
    @Override
    public void duck() {
        System.out.println("ga ga ga ga....");
    }
?
    @Override
    public void fly() {
        System.out.println("fly");
    }
}
// 接口 public interface Turkey { ? void gobble(); ? void fly(); } ? // 实现类 public class ATurkey implements Turkey { @Override public void gobble() { System.out.println("gobble"); } ? @Override public void fly() { System.out.println("fly short"); } }

2、我们想将ADuck 类的接口,转换成客户期望的另一个接口。需要构建一个适配器

public class TurkeyAdapter implements Duck  {
?
    Turkey turkey;
?
    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }
?
    @Override
    public void duck() {
        turkey.gobble();
    }
?
    @Override
    public void fly() {
        turkey.fly();
    }
}

3、 模拟一个客户端

public class ClientTest {
?
    static void testDuck(Duck duck){
        duck.duck();
        duck.fly();
    }
?
    public static void main(String[] args) {
        ATurkey aTurkey = new ATurkey();
        TurkeyAdapter adapter = new TurkeyAdapter(aTurkey);
        adapter.duck();
        adapter.fly();
?
        testDuck(new ADuck());
        testDuck(adapter);
    }
}

总结:

  Adapter 模式最大的作用还是将原本不兼容的接口融合在一起工作。

 

三、类适配器模式

UML图

技术分享图片

不同于对象适配器,类适配是通过多重继承来实现(Java不支持多继承)。

Client:客户认为他在和Target(鸭子)沟通;

Target:目标是鸭子类,是客户在其上调用方法的类;

Adaptee:火鸡类没有鸭子的方法,但是适配器可以对鸭子的方法进行调用,转接到调用火鸡的方法;

Adapter:通过扩展两个类,适配器使得火鸡可以响应鸭子的请求;

设计模式 (适配器模式)

原文:https://www.cnblogs.com/jiangyaxiong1990/p/13563403.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!