- 浏览: 62783 次
- 性别:
- 来自: 北京
文章分类
最新评论
1、意图
将一个类的接口转化成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2、别名
包装类 Wrapper
3、动机
有时,为复用而设计的工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。
4、适用性
以下情况使用Adapter模式
你想使用一个已经存在的类,而它的接口不符合你的需求
你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父亲接口。
5、结构
类适配器使用多重继承对一个接口与另外一个接口进行匹配,如下图所示
对象匹配器依赖于对象组合,如下图所示
6、代码实例
Before
Because the interface between Line and Rectangle objects is incapatible, the user has to recover the type of each shape and manually supply the correct arguments.
After
The Adapter’s “extra level of indirection” takes care of mapping a user-friendly common interface to legacy-specific peculiar interfaces.
将一个类的接口转化成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2、别名
包装类 Wrapper
3、动机
有时,为复用而设计的工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。
4、适用性
以下情况使用Adapter模式
你想使用一个已经存在的类,而它的接口不符合你的需求
你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父亲接口。
5、结构
类适配器使用多重继承对一个接口与另外一个接口进行匹配,如下图所示
对象匹配器依赖于对象组合,如下图所示
6、代码实例
Before
Because the interface between Line and Rectangle objects is incapatible, the user has to recover the type of each shape and manually supply the correct arguments.
class LegacyLine { public void draw(int x1, int y1, int x2, int y2) { System.out.println("line from (" + x1 + ',' + y1 + ") to (" + x2 + ',' + y2 + ')'); } } class LegacyRectangle { public void draw(int x, int y, int w, int h) { System.out.println("rectangle at (" + x + ',' + y + ") with width " + w + " and height " + h); } } public class AdapterDemo { public static void main(String[] args) { Object[] shapes = { new LegacyLine(), new LegacyRectangle() }; // A begin and end point from a graphical editor int x1 = 10, y1 = 20; int x2 = 30, y2 = 60; for (int i = 0; i < shapes.length; ++i) if (shapes[i].getClass().getName().equals("LegacyLine")) ((LegacyLine)shapes[i]).draw(x1, y1, x2, y2); else if (shapes[i].getClass().getName().equals("LegacyRectangle")) ((LegacyRectangle)shapes[i]).draw(Math.min(x1, x2), Math.min(y1, y2) , Math.abs(x2 - x1), Math.abs(y2 - y1)); } } line from (10,20) to (30,60) rectangle at (10,20) with width 20 and height 40
After
The Adapter’s “extra level of indirection” takes care of mapping a user-friendly common interface to legacy-specific peculiar interfaces.
class LegacyLine { public void draw(int x1, int y1, int x2, int y2) { System.out.println("line from (" + x1 + ',' + y1 + ") to (" + x2 + ',' + y2 + ')'); } } class LegacyRectangle { public void draw(int x, int y, int w, int h) { System.out.println("rectangle at (" + x + ',' + y + ") with width " + w + " and height " + h); } } interface Shape { void draw(int x1, int y1, int x2, int y2); } class Line implements Shape { private LegacyLine adaptee = new LegacyLine(); public void draw(int x1, int y1, int x2, int y2) { adaptee.draw(x1, y1, x2, y2); } } class Rectangle implements Shape { private LegacyRectangle adaptee = new LegacyRectangle(); public void draw(int x1, int y1, int x2, int y2) { adaptee.draw(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); } } public class AdapterDemo { public static void main(String[] args) { Shape[] shapes = { new Line(), new Rectangle() }; // A begin and end point from a graphical editor int x1 = 10, y1 = 20; int x2 = 30, y2 = 60; for (int i = 0; i < shapes.length; ++i) shapes[i].draw(x1, y1, x2, y2); } } line from (10,20) to (30,60) rectangle at (10,20) with width 20 and height 40
发表评论
-
STRATEGY(策略)——对象行为型模式
2013-06-17 16:19 6851、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7861、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 7071、意图 定义对象 ... -
MEDIATOR(中介者)——对象行为型模式
2013-06-09 16:17 6821、意图 用一个中 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6511、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7551、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 6981、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7741、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 7251、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 850设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 7021、意图 定义一个 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7411、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 7261、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 9131、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 6341、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6841、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7711. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 7021、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 7241、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 777本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第7节:结构型模式Adapter 适配器模式
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程
适配器模式是一种结构型设计模式,它允许不兼容的接口之间进行通信,通过创建一个适配器对象作为中间桥梁,使得原本不匹配的接口能够协同工作。在软件开发中,适配器模式的应用十分广泛,尤其是在处理遗留系统或者...
适配器模式是一种在软件设计中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在C#编程环境中,适配器模式扮演着重要的角色,尤其是在需要将已有类库或组件与新系统集成时。适配器模式通过创建一个...
适配器模式(Adapter Pattern)是一种结构型设计模式,它主要解决的是接口不兼容的问题,使得原本由于接口差异无法一起工作的类能够协同工作。在PHP中,适配器模式通过创建一个包装类(适配器类)来转换不兼容的接口...
c++设计模式-结构型模式-适配器模式,其他工程,c++源码。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
适配器模式(Adapter Pattern)是一种结构型设计模式,旨在将一个类的接口转换为客户端期望的另一个接口,从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通过引入一个适配器类,解决了接口不...
### 设计模式结构型-适配器 #### 概述 设计模式是一种在特定情境下解决软件设计问题的模板,通常被用来简化复杂系统的构建和维护。设计模式分为三种类型:创建型、行为型和结构型。其中,结构型设计模式关注于如何...
适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...
适配器模式是一种在软件设计中广泛使用的结构型设计模式,它的主要目的是解决不同系统、类库或组件之间的接口不兼容问题,使原本无法协同工作的模块能够顺利地一起工作。适配器模式的核心思想是“转换”,通过创建一...
适配器模式是一种结构型设计模式,它的主要目的是使不兼容的接口能够协同工作。在实际开发中,我们可能会遇到这样的情况:一个类库或者服务提供了一个接口,而我们的代码需要使用另一个接口。适配器模式就充当了两者...
适配器模式(Adapter Pattern)是一种结构型设计模式,其主要目的是将一个类的接口变换成客户端所期待的另一种接口。通过这种方式,原本由于接口不兼容而无法一起工作的类可以顺利合作。适配器模式有两种实现方式:...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行通信。这种模式可以在不修改现有代码的情况下重用现有类,并且可以使不兼容的接口之间进行通信。 适配器模式的定义 适配器模式是...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...
适配器模式是一种结构型设计模式,它允许两个不兼容的接口能够协同工作。本文将深入探讨适配器模式的原理、分类以及在Java中的实现方式。 #### 适配器模式的基本原理 适配器模式的核心在于创建一个新的类(适配器...
2. 对象适配器模式:适配器类包含一个适配者对象,并通过方法调用来实现接口的转换。这种方式更灵活,适配者类无需可继承,且适配器可以同时适配多个适配者。 3. 接口适配器模式:适配器类实现了目标接口,然后在...
适配器模式是一种在软件工程中广泛使用的结构型设计模式,它的主要目的是为了让不兼容的接口之间能够进行通信。在.NET开发中,适配器模式扮演着重要角色,尤其是在处理不同系统、库或组件间的集成时。这个".Net设计...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许两个不兼容的接口之间进行通信。在实际应用中,我们常常遇到这样的情况:一个系统需要使用现有的类,但其接口与系统的需求不匹配。适配器模式能解决这种...