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

  • 相关阅读:
    【Oracle】ORA-00257:archiver error. Connect internal only, until freed 错误的处理方法
    【SQL】区分新来顾客和再访顾客
    【Xcelsius】在PPT中嵌入水晶易表Xcelsius2008仪表盘
    【SAP BO】【WEBI】【转】Webi实现动态选择度量
    【转】Xcelsius2008 水晶易表问题 部分汇总
    如何进行有效的需求调研
    实现数据仓库的七个步骤、七个禁忌、七种思路
    UTC日期转时间戳
    WIN10下命令行禁用编辑模式
    让socket端口不被子进程继承
  • 原文地址:https://www.cnblogs.com/jiangyaxiong1990/p/13563403.html
Copyright © 2011-2022 走看看