结构型模式:适配器模式

我们可能遇到过这样的问题:我们新买了一个显示器,但是由于电脑是几年以前的,不能直接连上使用,需要在连接的时候,安装一个转接头。

还有,我们使用的手机充电线有一个大大的头,而不是直接一根线连在手机上,手机上的充电电压一般是5v,9v等,但绝不是220v。

还有苹果的手机等等,很多时候都会遇到需要转接头的时候。

在我们软件开发的过程中,比如对某个产品升级,但是还是要兼容原来老的接口,可以使用一个新的类,他可以继承原来的老类也可以使用组合使用老类,保证原来的接口继续受到兼容。这就需要我们现在说的适配器模式。简单的理解,适配器就是一个转接头。

这是适配模式的关系图。Adaptee类是被适配的类,Adapter2是适配器类,对类Adaptee进行一定的适配,使得Client类可以调用。假设Client是我们的手机,Adapter是手机充电线的变压器,Adaptee则是220v电流。经过Adapter的适配,Client可以使用220v的电来进行充电。看一下代码:

 1 public interface Target {
 2     public void doHandle();
 3 }
 4
 5 Target的实现类Adapter
 6 public class Adapter extends Adaptee implements Target{
 7
 8     @Override
 9     public void doHandle() {
10         super.requst();
11     }
12
13 }
14
15 public class Adaptee {
16     public void requst() {
17         System.out.println("执行了方法");
18     }
19 }
20
21 public class Client {
22     public void test(Target t){
23         t.doHandle();
24     }
25     public static void main(String[] args) {
26         Client c = new Client();
27         Target t = new Adapter();
28         c.test(t);
29     }
30 }

上面是使用继承来实现的,下面将Adapter类和Client类稍加修改,使用组合实现适配器模式:

 1 public class Adapter2 implements Target{
 2
 3     Adaptee adaptee;
 4
 5     public Adapter2(Adaptee adaptee) {
 6         super();
 7         this.adaptee = adaptee;
 8     }
 9
10     @Override
11     public void doHandle() {
12         adaptee.requst();
13     }
14
15 }
16
17 public class Client2 {
18     public void test(Target t){
19         t.doHandle();
20     }
21     public static void main(String[] args) {
22         Client2 c = new Client2();
23         Adaptee adaptee = new Adaptee();
24         Target t = new Adapter2(adaptee);
25         c.test(t);
26     }
27 }

只改变了这两个类,其他类不需要改变。

因为java是单继承的,继承了Adaptee类之后,就没有办法集成其他类,因此建议使用组合的适配器模式。

时间: 2024-10-08 04:17:02

结构型模式:适配器模式的相关文章

结构型模式—适配器模式

定义: 将一个类(Adaptee)的接口转换成客户(Client)希望的另外一个接口(Target). 目标接口(Target):客户所期待的接口.目标可以是具体的或抽象的类,也可以是接口. 需要适配的类(Adaptee):需要适配的类或适配者类. 适配器(Adapter):使得一个东西适合另一个东西的东西.百度中定义为:接口转换器.通过包装一个需要适配的对象,把源接口转换成目标接口. 为什么要适配:需要的东西已做好,但是不能用,短时间又不能改造,想办法适配它. 作用: 使得原本由于接口不兼容而

7 结构型模式-----适配器模式

模式动机:有时软件复用的一个难题就是接口的不兼容性,适配器的职责就是为客户提供兼容的适配者接口,使得客户只需访问一类接口就可以调用合适的适配者,而其中的适配细节则有适配器来完成. 模式定义(Adapter Pattern):将一个接口转换为用户期望的接口,使得那些接口不兼容的类可以一起工作. 模式结构图: 模式代码: bt_适配器模式.h: 1 #ifndef AP_H 2 #define AP_H 3 #include <iostream> 4 5 using namespace std;

第8章 结构型模式—适配器模式

1. 适配器模式(Adpater pattern)的定义 (1)将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原来由于接口不兼容而不能一起工作的那些可以一起工作. (2)适配器模式的结构和说明 ①Client客户端,调用自己需要的领域接口Target ②Target:定义客户端需要的跟特定领域相关的接口 ③Adaptee:己经存在的接口,通常能满足客户端的功能要求,但接口与客户端要求的特定领域接口不一致,需要被适配. ④Adapter:适配器,把Adaptee适配成Client需要的

结构型模式--适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模式,先看类图: 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码: public class Source { public void method1() { System.out

看透设计模式-结构型模式

这里我们主要讨论 结构型模式 适配器模式,: ● Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类. ● Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系. ● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,

设计模式06: Adapter 适配器模式(结构型模式)

Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不能满足的.如何应对这种“迁移的变化”?如何既能够利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口? 意图(Intent)将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一

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

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

设计模式(七) : 结构型模式--适配器模式

适配器模式主要是为了解决接口不符合系统需要的问题.分成类的适配器和对象的适配器. 1. 类的适配器: 示意性代码: package com.javadesignpattern.Adapter; public interface Target { public void sampleOperation1(); public void sampleOperation2(); } package com.javadesignpattern.Adapter; public class Adaptee {

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

设计模式(七):Adapter 适配器模式 -- 结构型模式

1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西.)  例子2:最典型的例