关闭

设计模式与实例代码:Adapter模式

标签: 设计模式classsystemuser
881人阅读 评论(0) 收藏 举报
分类:

定义/意图:将一个类的接口转换成客户希望的另外一个接口,使控制范围之外的一个原有类与我们期望的接口匹配。

问题:系统的数据和行为都正确,但接口不符:

解决方案:Adapter模式提供了具有所需要接口的包装类

参与者与协作者:Adapter改变了被适配类的接口,使得被适配类与Adapter的基类接口匹配。这样client就可以无分别的使用被适配的对象

效果:适配器模式使原有对象能够适应新的类结构,不受其接口限制

实现:将被适配类包含在Adapter类之中,Adapter与需要的接口匹配,调用其包含的类方法。


下面给出引模式的实现代码:

// Adapter pattern -- Structural example

using System;
 
namespace Adapter
{
  /// <summary>
  /// MainApp startup class for Structural
  /// Adapter Design Pattern.
  /// </summary>
  class MainApp
  {
    /// <summary>
    /// Entry point into console application.
    /// </summary>
    static void Main()
    {
      // Create adapter and place a request
      Target target = new Adapter();
      target.Request();
 
      // Wait for user
      Console.ReadKey();
    }
  }
 
  /// <summary>
  /// The 'Target' class
  /// </summary>
  class Target
  {
    public virtual void Request()
    {
      Console.WriteLine("Called Target Request()");
    }
  }
 
  /// <summary>
  /// The 'Adapter' class
  /// </summary>
  class Adapter : Target
  {
    private Adaptee _adaptee = new Adaptee();
 
    public override void Request()
    {
      // Possibly do some other work
      //  and then call SpecificRequest
      _adaptee.SpecificRequest();
    }
  }
 
  /// <summary>
  /// The 'Adaptee' class
  /// </summary>
  class Adaptee
  {
    public void SpecificRequest()
    {
      Console.WriteLine("Called SpecificRequest()");
    }
  }
}

在Head First设计模式中有一个把鸭子装扮成火鸡的例子。在这里不再赘述。

在使用中有时所适配的对象可能并不能完全完成所需要的功能,这种情况下我们仍可以使用Adapter模式,这样已有类中的功能可以适配,而没有的功能可以在包装类中实现。

实际上,Adapter模式有两种类型,对象适配器和类适配器。我们上面看的例子和是对象适配器,Adapter中包含了一个Adaptee的对象。

类适配器方式采用多重继承的方式来实现,在类图中唯一的变动就是由Adapter继承自Adaptee。




0
0
查看评论

c++设计模式(五)Adapter class/object 适配器

在c++中什么是适配器呢?           先来看个例子:对于笔记本电脑,每台都有一个适配器,这个适配器干什么呢?就是给笔记本提供合适的电压,因为不同的国家民用电压标准不同,美国是110,中国是220v那么,某天老板让你去美国出差,如果你笔记本没...
  • chenxun2009
  • chenxun2009
  • 2015-09-12 01:45
  • 1129

设计模式 - Adapter模式

1 原理 用C++很好实现,因为C++可以多个继承。但是C#、Java等语言不能多继承类,只能多继承接口。使用这些语言实现Adapter模式,只能将想要适配的两个类或者更多类抽象出接口,然后将适配器继承这些接口,使用方法或者构造方法,将想要适配的类的实例传入适配器,然后通过适配器调用各个的方法。 ...
  • wdsdsdsds
  • wdsdsdsds
  • 2016-05-20 20:41
  • 147

设计模式-Adapter模式

最近在工作中遇到了一种场景,大概是这样:一个项目中,包含Widget(桌面小部件),它是由RemoteViews来渲染和实现的,而现在的需求是,要在应用程序里面对Widget上的字体大小和颜色进行设置,并且在应用里面能够看到变化,这就需要由View来渲染和实现。但是View和RemoteViews事...
  • hello0370
  • hello0370
  • 2014-12-19 21:40
  • 508

设计模式---Adapter模式

adapter模式:1.隶属类型:结构模式 2.种类两种:Class adapter :extends+implementsObject adapter :aggregation+implements(个人认为还有 implements+implements)2.使用条件:a.两个没有关系的类组合在...
  • brave1
  • brave1
  • 2005-08-05 19:01
  • 856

设计模式-Adapter模式

适用场景举例: 开发中需要使用一个第三方的库,可是第三方库的接口无法修改,而且接口与现有的设计接口不一致。为了达到一致的效果,可以在现有的类结构中派生一个子类,在该子类中对第三方的库接口做一下包装,这样就可以实现一致的调用接口了。 模式比较简单,代码略。
  • qingfeng_happy7
  • qingfeng_happy7
  • 2016-01-11 11:45
  • 183

java 设计模式-----适配器模式

现实中的问题 有一个插座,这个插座是三个口的,但是我们手上只有两个触角的插头,一种笨方法就是直接强行把两个触角掰弯,插进去(这种事情我就做过),还有一种方法就是找一个转换头来。 看下面一张图就大概明白了,很明显现有系统很难和厂商提供的匹配,该怎么做呢?那么适配器这...
  • yujin753
  • yujin753
  • 2015-05-31 12:12
  • 1241

设计模式与实例代码:单例模式

意图:为保证一个类仅有一个实例,并提供一个访问它的全局访问点,所有实体均使用此对象的相同的实例,而无需将引用传给它们。     问题:几个不同的客户对象需要引用同一对象,而且希望确保这种类型的对象数目不超过一个。、     解决方案:保...
  • zzulp
  • zzulp
  • 2012-03-23 21:35
  • 1016

23种设计模式——Adapter模式

一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 实际上在软件系统设计和开发中,这种问题也会经常遇到:我们为了完成某项工作购买了一个第三方的库来加快开发。这就带
  • ao929929fei
  • ao929929fei
  • 2011-09-21 12:38
  • 329

java设计模式——Adapter模式

1.概述: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。3.模式中的角色  3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。  3.2 需要适配的类(Adaptee):需要适...
  • shanshui911587154
  • shanshui911587154
  • 2017-02-08 14:38
  • 118

007.设计模式之Adapter模式

007.设计模式之Adapter模式
  • cay22
  • cay22
  • 2010-11-22 11:50
  • 748
    关注我
    微信关注

    打赏
    个人资料
    • 访问:829000次
    • 积分:8504
    • 等级:
    • 排名:第2769名
    • 原创:174篇
    • 转载:57篇
    • 译文:1篇
    • 评论:62条
    最新评论