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

  • 相关阅读:
    String类
    try catch异常捕获
    while循环语句
    编程中穷举法的运用
    for循环例题
    编程中的 if ()else() 语句
    代位符
    运算符_及_运算符优先级
    C#中的类型转换
    Asp.net基础知识
  • 原文地址:https://www.cnblogs.com/jiangyaxiong1990/p/13563403.html
Copyright © 2011-2022 走看看