zoukankan      html  css  js  c++  java
  • 设计模式 (适配器模式)

    适配器模式

    一、简介

    适配器模式(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:通过扩展两个类,适配器使得火鸡可以响应鸭子的请求;

  • 相关阅读:
    苹果的HomeKit协议
    广州出游计划
    Qt学习博客推荐
    Log4Qt使用(三)在DailyRollingFileAppender类中增加属性mMaxBackupIndex
    QT中关于窗口全屏显示与退出全屏的实现
    键盘事件-----按下回车键则触发事件
    窗体显示/编码设置/开机启动/文件选择与复制/对话框等
    设置系统日期时间
    输入内容, 列出可选的项: QComboBox
    如何根据安装时缺失的文件查找对应的包
  • 原文地址:https://www.cnblogs.com/jiangyaxiong1990/p/13563403.html
Copyright © 2011-2022 走看看