- 浏览: 60180 次
- 性别:
- 来自: 北京
文章分类
最新评论
ADAPTER(适配器) --- 类对象结构型模式
- 博客分类:
- 设计模式
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 6511、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7431、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 6471、意图 定义对象 ... -
MEDIATOR(中介者)——对象行为型模式
2013-06-09 16:17 6511、意图 用一个中 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6171、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7281、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 6691、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7261、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 6971、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 813设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 6731、意图 定义一个 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7091、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 6941、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 8591、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 5991、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6531、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7361. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 6751、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 6861、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 731本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第7节:结构型模式Adapter 适配器模式
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程
适配器模式(Adapter Pattern) 是作为两个不兼容接口之间的桥梁, 这种类型的设计模式属于结构型模式。 一些书籍也称适配器模式为缺省适配器模式(Default Adapter Pattern) 。 适配器模式主要分 为三类: 类...
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)
c++设计模式-结构型模式-适配器模式,其他工程,c++源码。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
适配器模式(Adapter Pattern)是一种结构型设计模式,旨在将一个类的接口转换为客户端期望的另一个接口,从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通过引入一个适配器类,解决了接口不...
适配器模式是一种结构型设计模式,它允许接口不兼容的两个类可以协同工作。以下是该模式的要点: 1. **角色**: - **Target(目标接口)**:客户端期望调用的接口。 - **Adaptee(适配者)**:现有的、接口与目标...
4.1 ADAPTER(适配器)——对象结构型模式 4.2 BRIDGE(桥接)——对象结构型模式 4.3 COMPOSITE(组成)——对象结构型模式 4.4 DECORATOR(装饰)——对象结构型模式 4.5 FACADE(外观)——对象结构型模式 4.6 ...
这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入...
3、适配器模式(Adapter) 用意:把一个类的接口变换成客户所期待的另外一个接口。
创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...
4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型...
C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式) C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) C#面向对象设计模式...
4.1 Adapter(适配器)—类对象结构型模式 92 4.2 Bridge(桥接)—对象结构型模式 100 4.3 Composite(组成)—对象结构型模式 107 4.4 Decorator(装饰)—对象结构型模式 115 4.5 FACADE(外观)—对象结构型模式...
主要介绍了PHP设计模式:适配器模式Adapter,结合实例形式详细分析了PHP适配器模式Adapter基本概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入...
NULL 博文链接:https://jacky-dai.iteye.com/blog/1929106
4.1 adapter(适配器)—类对象结构型 模式 92 4.2 bridge(桥接)—对象结构型 模式 100 4.3 composite(组成)—对象结构型 模式 107 4.4 decorator(装饰)—对象结构型 模式 115 4.5 facade(外观)—...