`
kennethf6986
  • 浏览: 67298 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Adapter适配器模式的理解

阅读更多
     Adapter适配器模式是一种结构型模式,主要应对:由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是,新环境要求的接口是现存对象所不满足的。

     《设计模式》中说道:将一个类的接口转换成客户端程序希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

     下面列举一个具体的应用场景(摘录自Thinking In Java)

     我们知道,如果要使一个类能用于foreach语法,可以让这个类实现Iterable接口。假如有一个Iterable类,你想添加一种或者多种在foreach语句中使用这个类的方法,应该如何做呢?例如,假设你希望可以选择以向前的方向或者向后的方向迭代一个单词列表。如果直接继承这个类,并覆盖iterator()方法,你只能替代现有的方法,而不能实现选择。

     当你有一个接口并需要另一个接口时,编写适配器就可以解决问题。这里,我希望在默认的前向迭代器的基础上,添加反向迭代器的能力,因此不能使用覆盖,而是添加了一个能够产生Iterable对象的方法,该对象可以用于foreach语句,这使得我们可以提供多种使用foreach的方式:

代码如下:

class ReverisbleArrayList<T> extends ArrayList<T> {  
    public ReverisbleArrayList(Collection<T> c) {super(c);}  
    public Iterable<T> reverse() {  
        return new Iterable<T>() { //实现iterable接口的 匿名内部类  
  
            @Override  
            public Iterator<T> iterator() {  
                return new Iterator<T>() {  
                    int current = size() - 1;  
                    @Override  
                    public boolean hasNext() {  
                        return current > -1;  
                    }  
  
                    @Override  
                    public T next() {  
                        return get(current--);  
                    }  
  
                    @Override  
                    public void remove() {  
                    }  
                };  
            }  
        };  
    }  
}  
  
public class AdapterMethodIdiom {  
    public static void main(String[] args) {  
        ReverisbleArrayList<String> ral =   
            new ReverisbleArrayList<String>(  
            Arrays.asList("asm c c++ java c# python".split(" "))  
        );   
          
        for(String s : ral)  
            System.out.print(s + " ");  
        System.out.println();  
          
        for(String s : ral.reverse())  
            System.out.print(s + " ");  
    }  
}
分享到:
评论

相关推荐

    Java优良的Adapter模式:适配器模式

     Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式。  在大规模的系统开发过程中,我们常常碰到诸如以下...

    Android设计模式之适配器(Adapter)模式

    本文实例为大家分享了Android适配器模式源码,供大家参考,具体内容如下 1. 模式介绍 1.1模式的定义:  适配器模式把一个类的接口变换成客户端所期待的另一...这个层我们可以理解为这里的Adapter层,通过这层来进行一

    深入理解JavaScript系列(39):设计模式之适配器模式详解

    主要介绍了深入理解JavaScript系列(39):设计模式之适配器模式详解,适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),需要的朋友可以参考下

    C++设计模式之适配器模式(Adapter)

    适配器模式顾名思义在于接口的转换,最形象的例子就如两口转三口电源适配器,口子的数量可以理解为参数数量,一如我们调用三个参数的接口,而提供的接口只有两个参数,那么久需要适配器类进行接口的扩展改造,这就是...

    PHP设计模式之适配器模式代码实例

    Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。 应用场景: 如数据操作有mysql、mysqli、pdo、sqlite、postgresql等,假若生成环境需要更换...

    ASP.NET的适配器设计模式(Adapter)应用详解

    前天有一网友问及有关设计模式的适配器模式(Adapter)时,说不太好理解。让Insus.NET能否举个简单的例子来说明一下。下面的动画是Insus.NET做出来的效果: 上面的演示,两个灯的规格一样,要求输入的电压为15伏。 ...

    Java设计模式,并加上个人理解

    7. 适配器模式 (Adapter Pattern) 8. 模板方法模式 (Template Pattern) 9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite Pattern) 12. 装饰者模式 ...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...

    JAVA设计模式之结构模式

    这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...

    23种设计模式的java源代码----容易理解的源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些设计模式源代码更容易理解

    研磨设计模式(完整带书签).part2.pdf

    第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章...

    研磨设计模式(完整带书签).part1.pdf

    第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章...

    python实现Adapter模式实例代码

    本文研究的主要是python实现Adapter模式的相关内容,具体实现代码如下。 Adapter模式有两种实现方式一种是类方式。 #理解 #就是电源适配器的原理吧,将本来不兼容的接口类能够工作 #这个是类实现方式 #例子 #假如一...

    23种设计模式的java源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些代码对于初学者看起来稍微复杂一些,我...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第3章 适配器(adapter)模式 13 第4章 外观(facade)模式 27 第5章 合成(composite)模式 39 第6章 桥接(bridge)模式 52 第7章 职责型模式介绍 62 第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 ...

    研磨设计模式-part2

    第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章...

    研磨设计模式-part4

    第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章...

    研磨设计模式-part3

    第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章...

Global site tag (gtag.js) - Google Analytics