适配器模式--学习

原创 2010年05月31日 11:15:00

适配器模式

 

将一个已有的服务器端应用接口转换成一个客户端程序所期望的接口。
模式涉及的角色有
目标接口(ITarget):所期待的接口,这里是类适配器模式,因此目标不可以是类。
(Adaptee)需要适配的类
适配器(Adapter)在这里把源接口转换为目标接口,显然这一接口必须是具体的类。

 

意图

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

结构图

1 类的Adapter模式结构图

 

2 对象的Adapter模式结构图

 

 

 

 

包括类适配器和对象适配器两种

1、类适配器

由于 Adapter Adaptee的子类因此可以在Adapter中置换(override)Adaptee中的一些方法。但是对于类适配器,如果用此类适配源的子类就行不通了。即类适配器可以置换源的方法,对象适配器可以同时用于适配源的所有子类,反之则不容易。

2、对象适配器

这种做法很象货物的包装过程,被包装货物的真实样子被包装所掩盖和改变。因此有人把这种模式称为包装(Wrap)模式对象适配器的同一个适配器可以适配源也可以适配源的子类。但是与类适配器相比要想置换掉源类的方法就不容易,如果一定想置换掉源类的某一个方法就只好先做一个源类的子类,将源类的方法置换掉然后再把源类的子类作为真正的源进行适配。虽然置换掉源类的方法不容易,但是要增加一些新的方法则方便的很,而且新增加的方法同时适应所有的源及其子类。

//类适配器
namespace DesignPattern.Adapter.ClassAdapter
{
    
public interface ITarget
     {
        
void SampleOperation1();
        
void SampleOperation2();
    }

    
public class Adaptee
     {
        
public void SampleOperation1()
         {
            
        }
    }

    
public class Adapter : Adaptee,ITarget
     {
        
public void SampleOperation2()
         {
    
        }
    }
}

//对象适配器
namespace DesignPattern.Adapter.ObjectAdapter
{
    
public interface ITarget
     {
        
void SampleOperation1();
        
void SampleOperation2();
    }

    
public class Adaptee
     {
        
public void SampleOperation1()
         {
            
        }
    }

    
public class Adapter : ITarget
     {
        
private Adaptee adaptee;

        
public Adapter(Adaptee adaptee)
         {
            
this.adaptee=adaptee;
        }
        
        
public void SampleOperation1()
         {
            
this.adaptee.SampleOperation1();
        }

        
public void SampleOperation2()
         {
            
//write your code here
        }

    }
}


在这个例子中 adapter 补充了一个 adaptee 没有的方法 但不要误认为适配器就是补充源角色没有的方法而设计的。

缺省适配器模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有类型进行扩展。这样这个抽象类继承下去的子类就不必实现所有的方法了。新的类就是Adapter类而给出缺省实现的抽象类就可以被当作Adaptee。缺省适配器的目的与普通适配器的目的不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。

namespace DesignPattern.DefaultAdapter
{
    
public interface IService
   {
        
void ServiceOperation1();
        
string ServiceOperation2();
    }

    
public abstract class ServiceAdapter : IService
   {

        
public virtual void ServiceOperation1()
         {
            
        }

        
public virtual string ServiceOperation2()
         {
            
return null;
        }

    }
}

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sz_bdqn/article/details/5636031

恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(1)

          恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(1)                                     序    恶魔吹着笛子来:可能这不能算是一...
  • SnowFalcon
  • SnowFalcon
  • 2002-01-08 09:33:00
  • 2128

java/android 设计模式学习笔记(6)---适配器模式

这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式。在我...
  • zhao_zepeng
  • zhao_zepeng
  • 2016-06-05 17:29:10
  • 9396

适配器模式原理及实例介绍

本文首先介绍了适配器模式的基本实现原理,然后通过一个实例让读者从代码的角度快速了解适配器模式的运行方式,接着对适配器模式在 JDK 中的应用做了一些介绍,最后对适配器模式的两种实现方式区别、优缺点...
  • wanglha
  • wanglha
  • 2015-07-08 10:22:47
  • 1038

js高级视频教程

  • 2014年09月23日 17:37
  • 110KB
  • 下载

设计模式总结之Adapter Pattern(适配器模式)

Adapter Pattern(适配器模式) 意图 将一个类的接口转换成另外一个客户希望的接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 注:适配器模式在详细设...
  • cooldragon
  • cooldragon
  • 2016-08-11 00:48:01
  • 1896

设计模式(二) 三种适配器模式 总结和使用场景

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52703280本文出自:【张旭童的博客】一 概述定义:适配器模式将某个类的接口转换成客...
  • zxt0601
  • zxt0601
  • 2016-10-18 16:34:41
  • 11032

两种适配器模式(Adapter Pattern)

1. 概述   适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 2. 解决的问题   举个例子:有一个三相插座...
  • onlyyjco
  • onlyyjco
  • 2016-09-09 10:28:15
  • 2639

设计模式——适配器模式 Java源代码

适配器模式,《Head First Design Patterns》给的代码的例子是关于鸭子和火鸡,然而鸭子和火鸡离日常生活比较远。这次,我改编了实验楼网站上面的例子,关于插座和充电器。...
  • u013390476
  • u013390476
  • 2016-01-01 16:02:01
  • 3071

菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同

节前把3个设计模式的学习心得分享了一下,分别是适配器模式,装饰模式,代理模式。 但是似乎越写越有些迷糊,这三种模式都有着一些大同小异的地方,总是有些搞不清。 今天再重新学习下,把学习心得分享给大家一下...
  • lulei9876
  • lulei9876
  • 2014-10-14 10:55:01
  • 13990

适配器模式——个人理解

适配器模式的理解和个人心得。
  • u011288271
  • u011288271
  • 2016-08-06 11:53:18
  • 580
收藏助手
不良信息举报
您举报文章:适配器模式--学习
举报原因:
原因补充:

(最多只允许输入30个字)