zoukankan      html  css  js  c++  java
  • 适配器模式探讨

     

    要点

    ² 一个类的程序设计接口不太方便于某一个专用场合;

    ² 具备共同特征的类有很多,也就是有共同特征,且不适用于同样的专有场合;

    ² 可以把一个类的程序设计接口转换成另一个接口,这就是适配器模式;

    ² 适配器模式通过两种方法可以实现:第一是从原有的类派生新类,然后添加新的一致的方法,使得新类可以符合需要的接口;第二种方法是通过对象组合,也就是适配器类有一个原有类型的数据成员,把它包装成另一组使用接口,这种方法隐藏了原有类型的接口;

    ² 适配器模式作为结构型模式,特点是每个类型都有一个适配器,无论是派生还是组合,都是一个类型包装成另一个类型接口,而不是多个类型接口组合成一个接口,所以适配器是结构型模式里面的简单情形。

    用途

    例如,C#提供的winform控件ListBox,其集合数据的操作必须通过属性Items来操作。例如,Items.Add(),Items.Clear()等等。为了直接方便地使用,而不是通过Items,我们可以通过适配器模式把这些接口转换成另外一组接口来使用。

    适配器模式正如平时所用的适配器,例如计算机经常使用的网络适配器,键盘适配器。还如原来的大口接头的键盘和小口接口使用的时候采用转接线,本身就是适配器的很好例子。

                                                                   图1
    如图1所示,是依据两种方法构造的适配器。通过继承构造的叫类适配器,而通过组合构造的叫对象适配器。对象适配器的优点是可以隐藏原有类型的接口,因为目的就是把原有的类型接口包装成另外的一组接口,因此隐藏起来要好一些。但是在只包装部分接口的情况下,就不能隐藏原有类型接口了。
                                                                      图2
      图2所示,是适配器类型的更进一步创建方法。在某些情形下,情况可能比较复杂,如果采用图1所示的方法,对系统的扩展性不利,而且耦合会太紧密。通过抽象方法定义一个接口,这个就是抽象层,然后客户程序DemoWinForm与这个抽象层发生耦合,也就是直接使用这个接口,而不是实际的类型。

    这样一来,如果添加新的适配器将非常方便,而且如果适配器发生变更,也无需修改客户程序。客户程序通过抽象层消除了与实际类型的耦合。

  • 相关阅读:
    366. Find Leaves of Binary Tree输出层数相同的叶子节点
    716. Max Stack实现一个最大stack
    515. Find Largest Value in Each Tree Row查找一行中的最大值
    364. Nested List Weight Sum II 大小反向的括号加权求和
    156. Binary Tree Upside Down反转二叉树
    698. Partition to K Equal Sum Subsets 数组分成和相同的k组
    244. Shortest Word Distance II 实现数组中的最短距离单词
    187. Repeated DNA Sequences重复的DNA子串序列
    java之hibernate之基于主键的双向一对一关联映射
    java之hibernate之基于主键的单向一对一关联映射
  • 原文地址:https://www.cnblogs.com/worldreason/p/1214529.html
Copyright © 2011-2022 走看看