zoukankan      html  css  js  c++  java
  • 设计模式 8 —— 适配器模式

    设计模式目录:

    设计模式 1 ——观察者模式

    设计模式 2 —— 装饰者模式 

    设计模式 3 —— 迭代器和组合模式(迭代器)

    设计模式 4 —— 迭代器和组合模式(组合)

    设计模式 5 —— 工厂模式

    设计模式 6 —— 单件模式

    设计模式 7 —— 命令模式

    设计模式 8 —— 适配器和外观模式

    设计模式 9 —— 模板方法模式

    概述

    第1 部分 问题引入

    第2 部分 实现

    第3 部分 定义

    第4 部分 对象和类适配器

    第1 部分 问题引入

    OO适配器是什么,现实中到处都是。比方说:如果你需要在欧洲国家使用美国制造的笔记本电脑,你可能需要使用一个交流电的适配器。其实,OO适配器和真实世界的适配器扮演着同样的角色;将一个接口转换成另一个接口,以符合客户的期望。

    第2 部分 实现

    看看使用中的适配器实现:

    首先是鸭子接口:

     1 /**
     2  * 鸭子接口
     3  * @ClassName: Duck
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午3:33:04
     7  */
     8 public interface Duck {
     9     
    10     public void quack();
    11     public void fly();
    12 
    13 }

    绿头鸭,鸭子的子类

     1 /**
     2  * 绿头鸭 
     3  * @ClassName: MallardDuck
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午3:38:54
     7  */
     8 public class MallardDuck implements Duck{
     9 
    10     @Override
    11     public void quack() {
    12         System.out.println("Quack");
    13     }
    14 
    15     @Override
    16     public void fly() {
    17         System.out.println("I'm flying.");
    18     }
    19 
    20 }

    火鸡:

     1 /**
     2  * 火鸡
     3  * @ClassName: Turkey
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午3:54:37
     7  */
     8 public interface Turkey {
     9     
    10     public void gobble();
    11     public void fly();
    12 
    13 }
     1 /**
     2  * 火鸡的具体实现类
     3  * @ClassName: WildTurkey
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午3:55:23
     7  */
     8 public class WildTurkey implements Turkey{
     9 
    10     @Override
    11     public void gobble() {
    12         System.out.println("Gobble gobble.");
    13     }
    14 
    15     @Override
    16     public void fly() {
    17         System.out.println("I'm flying a short distance.");
    18     }
    19 
    20 }

    鸭子的适配器:

     1 /**
     2  * 鸭子适配器
     3  * @ClassName: TurkeyAdapter
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午3:58:12
     7  */
     8 public class TurkeyAdapter implements Duck{
     9     
    10     Turkey turkey;
    11     
    12     public TurkeyAdapter(Turkey turkey){
    13         this.turkey = turkey;
    14     }
    15 
    16     @Override
    17     public void quack() {
    18         turkey.gobble();
    19     }
    20 
    21     @Override
    22     public void fly() {
    23         for(int i=0;i<5;i++){
    24             turkey.fly();
    25         }
    26         
    27     }
    28 
    29 }

    测试程序:

     1 /**
     2  * 
     3  * @ClassName: TurkeyTestDrive
     4  * TODO
     5  * @author Xingle
     6  * @date 2014-10-9 下午4:03:21
     7  */
     8 public class TurkeyTestDrive {
     9     public static void main(String[] args){
    10         MallardDuck duck = new MallardDuck();
    11         WildTurkey turkey = new WildTurkey();
    12         
    13         Duck turkeyAdapter = new TurkeyAdapter(turkey);
    14         System.out.println("The Turkey says...");
    15         turkey.gobble();
    16         turkey.fly();
    17         
    18         System.out.println("
    The Duck says...");
    19         testDuck(duck);
    20         
    21         System.out.println("
    The TurkeyAdapter says...");
    22         testDuck(turkeyAdapter);
    23     }
    24 
    25      static void testDuck(Duck duck) {
    26          duck.quack();
    27          duck.fly();
    28     }
    29 
    30 }

    执行结果:

    第3 部分 定义

    适配器模式是将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。

    这个模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。这可以让客户从实现的接口解耦。如果在一段时间以后,我们想要改变接口,适配器可以让改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着改。

     

     适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配器:这种做法还有额外的优点:被适配者的任何子类,都可以搭配着适配器使用。

    第4 部分 对象和类适配器

    实际上有两种适配器:“对象”适配器和“类”适配器。唯一的差别就是在于适配器继承了Target和Adapee。而对象适配器利用组合的方式将请求传送给被适配者。

  • 相关阅读:
    C#学习(四)
    C#学习(三)
    sqlserver基本操作
    ado.net(1)
    wpf的学习日志(一)
    C#学习(二)
    三大范式
    存储过程
    事务
    范文模板
  • 原文地址:https://www.cnblogs.com/xingele0917/p/4013913.html
Copyright © 2011-2022 走看看