引言:

有一次我看到一个朋友拿出一个三角型的东西,好奇的上去一看你,我勒个去,传说中的万能插口转接器(插口适配器)。

一面是插入口,集合了我认识的所有插口的形状,也有国内没看见过的;另一个是跟插座接触的,也是集合了我见过的所有样式,当然也有我没见过的。

问了下,这个三角型的东西,全世界通用(前提是跟他的另一个变压器一起使用)。这个东西老贵了,不算变压器,也要两张毛爷爷多。

而这就是现实生活中的适配器模式。

理解:

适配器,就是把原来两个不能一起使用的东西、模块、系统,通过中间的一个转化器,变成两个东西、模块、系统可以连接起来一起使用。

这个在IT项目中是经常碰到的问题,比如我们需要在一个已有的系统平台中,加载我们开发的模块系统,那么授权系统就需要用别人的,

这个时候我们需要做一个适配器,把平台中的授权系统封装后,给我们系统使用。

适配器模式,分两种:接口适配器和对象适配器。

代码示例:

接口适配器

// 第三方系统的操作
public class OperateUserInfo
{
public String OperateUser()
{
return "用户的姓名";
}
}
// 获取用户信息接口
public interface IUser
{
String GetUserName();
}
// 实现接口
public class UserAdapter : IUser
{
OperateUserInfo _opObj = new OperateUserInfo();
public string GetUserName()
{
return _opObj.OperateUser();
}
}
static void Main(string[] args)
{
// 调用
IUser _userObj = new UserAdapter();
Console.WriteLine(_userObj.GetUserName());
Console.ReadLine();
}

对象适配器

public class User
{
public virtual String GetUserName()
{
return String.Empty;
}
} public class UserAdapter2 : User
{
OperateUserInfo _opObj = new OperateUserInfo();
public override String GetUserName()
{
return _opObj.OperateUser();
}
}
static void Main(string[] args)
{
// 调用
IUser _userObj = new UserAdapter();
Console.WriteLine(_userObj.GetUserName());
Console.WriteLine("----");
//
User _userObj2 = new UserAdapter2();
Console.WriteLine(_userObj2.GetUserName()); Console.ReadLine();
}

这两种模式的区别在于,接口的适配是没有默认实现的,所有的方法都是需要继承类自己实现的。
而对象模式是,可以有自己的实现的,这个其实就是抽象类和接口的区别吧。

总结:

1、 对象适配用处是,可以使Adaptee不必实现不需要的方法,具体就是其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。
2、 适配器类可以是抽象类。
3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。

应用场景:

1、 系统需要使用现有的类,而此类的接口不符合系统的需要。
2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3、 仅对对象适配器而言,在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

特别描述:

4、代码IUser _userObj = new UserAdapter();从耦合度来说这行代码的不符合要求,因为耦合度太高,所以需要我们设计时解耦。

解耦的方式是,使用反射和泛型的感念,来动态声明实例。

5、但是这里的Demo只是说明适配器模式,真真在设计时,如何使用适配器,肯定不是Demo中的那样。

代码下载:

百度云盘 http://pan.baidu.com/s/1bn6B7Z5

CSDN  http://download.csdn.net/detail/hater22/6850527

.Net设计模式_适配器模式的更多相关文章

  1. java_设计模式_适配器模式_Adapter Pattern(2016-08-09)

    概念 将一个接口转换成客户希望的另外一个接口.(该模式使得原本不兼容的类可以一起工作). UML图 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式. (1)对象的适配器模式结构图 (2)类 ...

  2. PHP设计模式_适配器模式

    将各种截然不同的函数接口封装成统一的API. PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API.类似的场景还有cache适 ...

  3. 【GOF23设计模式】适配器模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_适配器模式.对象适配器.类适配器.开发中场景  适配器模式  笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适 ...

  4. java设计模式5——适配器模式

    java设计模式5--适配器模式 1.结构型模式介绍 1.1.作用 从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类: 适配器模式 代理模式 桥接模式 装饰模式 组合模式 ...

  5. 每天一个设计模式-3 适配器模式(Adapteer)

    每天一个设计模式-3 适配器模式(Adapteer) 1.现实中的情况 旧式电脑的硬盘是串口的,直接与硬盘连接,新硬盘是并口的,显然新硬盘不能直接连在电脑上,于是就有了转接线.好了,今天的学习主题出来 ...

  6. Head First 设计模式之适配器模式与外观模式

    Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计 ...

  7. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  8. Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

    1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...

  9. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

随机推荐

  1. sql的连接查询方式

    1 SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中 ...

  2. torch7在mac上的安装

    在安装torch7的时候,一开始一直参考的是官方的文档: http://torch.ch/docs/getting-started.html#_ 但是无论怎么装都无法成功,主要是卡在了source那一 ...

  3. 【python】python的列表表达式或解析式,帅就一个字

    >>> list1 = [x**2 for x in range(10)]>>> list1[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  4. 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异

    在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Orac ...

  5. VPS用LNMP安装WordPress

    前言 前几天,朋友手头上有一个空闲的vps,256M内存,我决定拿来玩一下.经过一番思考,还是用来挂站吧.然后看是CentOS6系统,果断决定用从来没玩过的LNMP.于是,百度.谷歌找教程,好多教程都 ...

  6. Android开发者指南-方位传感器-Position Sensor

    Android开发者指南-方位传感器-Position Sensor 转载自:http://blog.sina.com.cn/s/blog_48d4913001010zsu.html Position ...

  7. 【产品体验】喵街&飞凡

    最近O2O很火啊,我也来找几个O2O产品体验下~~~ 阿里今年5月30号上线了一款线下逛街App——喵街,号称消费者的逛街神器.阿里去年已经与银泰合作一年,探索互联网和传统实体零售合作之路,这次则免费 ...

  8. 第 2 章 代理模式【Proxy Pattern】

    第 2 章 代理模式[Proxy Pattern] 以下内容出自:24种设计模式介绍与6大设计原则.pdf 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代 ...

  9. bzoj 3165: [Heoi2013]Segment 动态凸壳

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 202  Solved: 89[Submit][Stat ...

  10. C语言中返回字符串函数的四种实现方法

    转自C语言中返回字符串函数的四种实现方法 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 有四种方式: 1.使用堆空间,返回申请的堆地址,注意释放 2.函数参数传递指针,返回该指针 3.返回函 ...