常用设计模式:适配器模式

  相信适配器这个概念对于大伙来说都不陌生了吧?曾经买过港货的通过都知道,港货当中的充电器插线头是很蛋疼的三插口的,但是我们平常的充电插座,一般都是两插口的,那么要解决这个问题,我们的适配器就登场了,能够完美的将三插口转换成两插口的接口,然后我们就能在我们的两插口插排上使用充电器啦,姑且上个图吧~(该篇随记是参考了:http://blog.csdn.net/jason0539/article/details/22468457)

  了解了什么是适配器,那么适配器模式就一目了然了,适配器模式就是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。以下是适配器模式的具体的角色:

1.目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

2.需要适配的类(Adaptee):需要适配的类或适配者类。

3.适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

二话不说,先上个代码过过瘾:

public interface Target {

    void twoInsert();

}

//普通的实现了目标接口的类
public class ConcreteTarget implements Target {
    @Override
    public void twoInsert()
    {
          System.out.println("这个插头有两个插口");
    }
}

这是我们的目标接口和实现了目标接口的普通类。

//特殊的类,也就是我们例子当中的三插口的插头

public class ThreeInsertSocket
{
    public void ThreeInsert()
    {
        System.out.println("这个插头有三个插口");
    }
}

这是我们的特殊类,接下来我们看看如何通过我们的适配器实现目标接口的twoInsert方法和ThreeInsert方法的适配,见证奇迹的时刻:

public class Adapter extends ThreeInsertSocket implements Target{
    @Override
    public void twoInsert()
    {
        super.ThreeInsert();
    }

}

其实就是很简单的办法,首先通过适配器(adapter)去继承ThreeInsertSocket,把特殊的方法继承下来,然后再用适配器(adapter)去实现目标接口,通过重写目标接口的方法,在该方法当中调用继承下来的特殊方法即可,是不是很简单?

public class test
{
    public static void main(String[] args)
    {
        //正常实现了目标接口的普通功能类
        Target concreteTarget = new ConcreteTarget();
        concreteTarget.twoInsert();  

        // 使用特殊功能类,即适配类
        Target adapter = new Adapter();
        adapter.twoInsert();

    }
}
这个插头有两个插口
这个插头有三个插口

这就是运行的结果。那么总体过程可以总结为以下的图:

图中的Adaptee对应的就是我们的ThreeInsertSocket,这就是适配器模式当中的类适配器的写法,类适配器是通过适配器类(adapter)继承所需要适配的对象(adaptee),并且再实现目标接口(target)来实现被适配对象(adaptee)和目标接口(target)之间的耦合的。那么除了这种方式,还有没有其他方式来实现二者的耦合呢?当然有,那就是对象适配器模式。

一言不合,我们先看代码:

public class Adapter implements Target
{
    private ThreeInsertSocket adaptee;  

    public Adapter(ThreeInsertSocket adaptee) {
        this.adaptee=adaptee;
    }

    @Override
    public void twoInsert()
    {
        adaptee.ThreeInsert();
    }

}

需要改动的就是我们的适配器类的代码,可以看到,对象适配器模式当中,相比类适配器模式,不再对被适配对象(Adaptee)进行继承,而是通过适配器类(adapter)的构造函数传入被适配对象(Adaptee)的实例,然后通过委托该实例实现target接口当中定义的方法(twoInsert)

public class test {

    public static void main(String[] args)
    {
        //正常实现了目标接口的普通功能类
        Target concreteTarget = new ConcreteTarget();
        concreteTarget.twoInsert();  

        // 使用特殊功能类,即适配类
        ThreeInsertSocket adaptee=new ThreeInsertSocket();
        Target adapter = new Adapter(adaptee);
        adapter.twoInsert();

    }

}
这个插头有两个插口
这个插头有三个插口

可以看出这时候各类和接口之间的关系图应该变为:

那么至此,我们的适配器模式也讲解完毕,下一节,我们将开始我们的重头戏,javaIO的学习~

时间: 2024-08-08 08:46:03

常用设计模式:适配器模式的相关文章

常用设计模式-适配器模式

1.适配器使用场景: 1.系统需要使用现有的类,而此类的接口不符合系统的需要. 2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口. 3.通过接口转换,将一个类插入另一个类系中.(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口.) 2.生活场景 目前只有适配二脚插头的插座,但是买回来的电器是三脚的插头. 那如果让三脚插头可以插在二脚的插座上呢? 这时候

编程常用设计模式详解--(上篇)(工厂、单例、建造者、原型)

参考来自:http://zz563143188.iteye.com/blog/1847029 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1

说说设计模式~适配器模式

之前和大家一起谈了工厂模式和单例模式,今天来看一下另一种非常常用的模式,它就是适配器模式,第一次看到这个模式是通过"张逸"老师的"设计之道"这篇文章,在这里表adapter讲的很透彻,今天把张老师的文章拿过来,分享给大家! 何时能用到它? 对于一个软件生产商A来说,在过去的20年里,它们主要生产收音机,包括最早的老式半导体和现代的数字收音机,总之,是收音机.但不知道从什么时候开始,MP4媒体播放器出现了,这使得A生产商不得不去招新人,去生产适合大家的mp4播放器,这

编程常用设计模式详解--(中篇)(适配器、装饰、代理、外观、桥接、组合、享元)

摘自:http://blog.csdn.net/zhangerqing/article/details/8239539 我们接着讨论设计模式,上篇文章我讲完了5种创建型模式,这章开始,我将讲下7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,我们看下面的图: 6.适配器模式(Adapter) 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器

python之路,Day24 常用设计模式学习

python之路,Day24 常用设计模式学习 本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一

Android 常用设计模式(一)

由于项目变更的频繁性,作为一名程序员,我们需要掌握设计模式的必要性,就不言而喻~~,下面就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比较常用模式进行讲解,主要是以下几种: 观察者模式 适配器模式 代理模式 工厂模式 单例模式 命令模式 1.观察者模式(Observer Pattern) 释义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 故事理解:观察者想知道公司所有MM

23种常用设计模式的UML类图

本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整理常用设计模式的类图,一方面是为了练习UML,另一方面可以重新思考设计模式.当然,整理完成后可以作为一份手册供今后翻阅. 绘图工具:Visual Studio 2015 一.创建型 Factory Method(工厂方法) 定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类. 类图: Abstr

IOS开发常用设计模式

IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存. 所以苹果提供了一个UIAccelerometer的实例化方法+sharedAcceler

设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 详解

适配器模式(adapter pattern) 枚举器和迭代器 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考适配器模式(adapter pattern): http://blog.csdn.net/caroline_wendy/article/category/2281679 Java早期版本的枚举器(Enumeration)和现在的迭代器(Iterator) 可以使用适配器(adapter)进行转换. 适配器(adapter)代码: /** *

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现