码迷,mamicode.com
首页 > 其他好文 > 详细

菜鸟学设计模式系列笔记之适配器模式(adapter模式)

时间:2015-05-25 16:40:33      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:设计模式   数据结构   设计   对象      

一、结构模式简介:

在面向对象软件系统中,每个类都承担了一定的职责,它们可以相互协作,实现一些复杂的功能

结构型模式关注的是如何将现有类或对象组织在一起形成更加强大的结构

不同的结构型模式从不同的角度来组合类和对象


        1、结构模式描述如何将类或者对象结合在一起形成更大的结构

(1)类的结构模式:类的结构模式使用继承把类、接口等组合在一起,以形成更大的结构。当一个类从父类继承并实现某接口时,这个新的类就把父类的结构和接口的结构组合起来。类的结构模式是静态的。

(2)对象的结构模式:对象的结构模式描述了怎样把各种不同类型的对象组合在一起,以实现新功能的方法。

可以在运行时刻改变对象组合关系,对象的结构模式是动态的。

2、结构模式主要有:

Adapter适配器模式、Bridge桥接模式、Composite组合模式、Decorator装饰模式、

Facade门面模式、Flyweight享元模式、Proxy代理模式


意图Intent:

将一个类的接口转换成客户希望另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

动机Motivation:

有时为复用而设计的工具箱不能够被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配

在类中的应用场景:

(1)你想使用一个已经存在的类,而它的接口不符合你的需求

(2)你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作

(3)你想使用一些存在的类,但是不可能对每一个对进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口

技术分享

技术分享

典型的适配器代码:

public class Adapter extends Target
{
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void request()
{
adaptee.specificRequest();
}
}
客户端需要调用request()方法,但Adaptee 没有,只有specificRequest()方法。

Adapter中包装了一个Adaptee的实例,从而将客户端和Adaptee衔接起来,在Adapter的request()方法中调
用Adaptee的specificRequest()方法,实现了适配的目的。

适配器模式的用意是将接口不同而功能相同或相近的两个接口加以转换,并非仅仅用于补充源角色没有办法

技术分享

Target :定义Client 使用的与特定领域相关的接口

Client :与符合Target接口的对象协同

Adaptee : 定义一个已经存在的接口,这个接口需要适配

Adapter : 对Adaptee的接口与Target 的接口进行适配


技术分享


Bridge :结构类似,但Bridge的目的是将接口部分和实现部分分离,从而使得它们可以较为容易也相对独立的加以改变。而adapter则意味着改变一个已有的接口

Decorator : 增强了其他对象的功能而同时又不好改变其他的接口,透明性比Adapter好

Proxy: 在不改变它的接口的条件下,为另一个对象定义了一个代理

常见应用Application:

(1)如果不准备实现一个接口的所有方法时,可以制造一个抽象类,给出所有的平庸的具体实现

(2)适配器模式的把一个类的接口变换成客户端所期待的另一种接口,适配模式的“平庸化”形式可以使所考察的类不必实现不需要的那部分接口


例:假设有一个接口,该接口有五个方法:
interface InterfaceA
{
public void f1();
public void f2();
public void f3();
public void f4();
public void f5();
}
现打算写一个ClassB实现这个接口,但是只对接口所规
定的五个方法中的一个f1()感兴趣,能否把ClassB写
成这样:
class ClassB implements InterfaceA
{
public void f1()
}

正确方法:使用缺省适配模式
先设计一个抽象类:
abstract class AdapterC implements InterfaceA
{
public void f1()
public void f2()
public void f3()
public void f4()
public void f5()
}
然后让ClassB继承自抽象类AdapterC:
class ClassB extends AdapterC
{
public void f1()
}


Adapter模式的应用场景:

扩展应用时——想要修改一个投产中的接口时

1、用于解决正在服役的项目问题,在详细设计阶段一般不予考虑

2、补偿模式,用于解决接口不相容问题,通过把非本系统接口的对象包装成本系统可接受的对象,简化了系统大规模变更的风险。

菜鸟学设计模式系列笔记之适配器模式(adapter模式)

标签:设计模式   数据结构   设计   对象      

原文地址:http://blog.csdn.net/cool_easy/article/details/45968159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!