7 适配器模式

Posted zhixin9001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7 适配器模式相关的知识,希望对你有一定的参考价值。

适配器模式(Adaptor):将一个类的接口转换成客户希望的另一个接口。适配器让原本接口不兼容的类可以一起工作。

类似于我们日常生活中的电源适配器,提供了低压直流电和220V交流电之间的适配。

适配器有两种形式:对象适配器和类适配器。两者的类图分别如下:

对象适配器:

对象适配器

Adapter完成Target和Adaptee之间的适配,这里Client相当于笔记本,Target为低压直流电,Adaptee为220V交流电,Adapter为电源适配器。Adapter继承了Target,并与Adaptee关联。

再来看看类适配器是什么样的:

类适配器

类适配器与对象适配器的区别在于类适配器使用了多继承,Adapter同时继承了Target和Adaptee。但是,C#、Java等语言都不支持多继承(c++支持)。这里也就不做学习了。

对象适配器的简单代码如下,适配器用来进行迭代器(Iterator)到枚举器(Enumerator)的转换,以便让Client可以正常使用Enumerator。 

//Client
    public class Enumerator
    {
        public bool HasMoreElements()
        {
            return true;
        }

        public object NextElement()
        {
            return new object();
        }
    }
    //Adaptee
    public class Iterator
    {
        public virtual bool HasNext()
        {
            return true;
        }

        public virtual object Next()
        {
            return new object();
        }

        public virtual void Remove(int i)
        {

        }
    }
    //Adaptor
    public class EnumeratorIteratorAdaptor : Iterator
    {
        Enumerator enumerator;
        public EnumeratorIteratorAdaptor(Enumerator enumerator)
        {
            this.enumerator = enumerator;
        }
        public override bool HasNext()
        {
            return enumerator.HasMoreElements();
        }
        public override object Next()
        {
            return enumerator.NextElement();
        }
        public override void Remove(int i)
        {
            throw new Exception("不支持Remove()方法");
        }
    }
View Code

.NET中的DataAdapter就是适配器。但适配器往往只是在实在没有办法的时候才使用,比如像复用旧的类,想使用第三方的类但又不愿跟随第三方的设计,即在双方都不容易修改为统一格式的情况下,再使用适配器。如果是自己设计两个类,当然是要直接设计成两者可以配合。

《大话设计模式》中还提到了扁鹊的故事,真是很好的例子:

扁鹊

 

以上是关于7 适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习笔记------适配器模式

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从片段适配器启动活动

7.适配器模式

片段中ListView的android自定义适配器

设计模式之单例模式