[索引页]
[源码下载]

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

作者:webabcd

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

示例
有一个Message实体类,某个类对它的操作有Insert()和Get()方法。现在需要把这个类转到另一个接口,分别对应Add()和Select()方法。

MessageModel
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Adapter 

        /// <summary> 
        /// Message实体类 
        /// </summary> 
        public class MessageModel 
        { 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                /// <param name="msg">Message内容</param> 
                /// <param name="pt">Message发布时间</param> 
                public MessageModel(string msg, DateTime pt) 
                { 
                        this._message = msg; 
                        this._publishTime = pt; 
                } 
 
                private string _message; 
                /// <summary> 
                /// Message内容 
                /// </summary> 
                public string Message 
                { 
                        get { return _message; } 
                        set { _message = value; } 
                } 
 
                private DateTime _publishTime; 
                /// <summary> 
                /// Message发布时间 
                /// </summary> 
                public DateTime PublishTime 
                { 
                        get { return _publishTime; } 
                        set { _publishTime = value; } 
                } 
        } 
}
SqlMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Adapter 

        /// <summary> 
        /// 源(Adaptee)角色 
        /// Sql方式操作Message 
        /// </summary> 
        public class SqlMessage 
        { 
                /// <summary> 
                /// 获取Message 
                /// </summary> 
                /// <returns></returns> 
                public List<MessageModel> Get() 
                { 
                        List<MessageModel> l = new List<MessageModel>(); 
                        l.Add(new MessageModel("SQL方式获取Message", DateTime.Now)); 
 
                        return l; 
                } 
 
                /// <summary> 
                /// 插入Message 
                /// </summary> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public bool Insert(MessageModel mm) 
                { 
                        // 代码略 
                        return true; 
                } 
        } 
}
IMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Adapter 

        /// <summary> 
        /// 目标(Target)角色 
        /// 操作Message的接口 
        /// </summary> 
        public interface IMessage 
        { 
                /// <summary> 
                /// 获取Message 
                /// </summary> 
                /// <returns></returns> 
                List<MessageModel> Select(); 
 
                /// <summary> 
                /// 插入Message 
                /// </summary> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                bool Add(MessageModel mm); 
        } 
}
Message
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Adapter 

        /// <summary> 
        /// 适配器(Adapter)角色 
        /// 类适配器 
        /// 把源适配到这个类 
        /// </summary> 
        public class Message : SqlMessage, IMessage 
        { 
                /// <summary> 
                /// 获取Message 
                /// </summary> 
                /// <returns></returns> 
                public List<MessageModel> Select() 
                { 
                        return base.Get(); 
                } 
 
                /// <summary> 
                /// 插入Message 
                /// </summary> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public bool Add(MessageModel mm) 
                { 
                        return base.Insert(mm); 
                } 
        } 
}
Message2
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Adapter 

        /// <summary> 
        /// 适配器(Adapter)角色 
        /// 对象适配器 
        /// 把源适配到这个类 
        /// </summary> 
        public class Message2 : IMessage 
        { 
                private SqlMessage _sqlMessage; 
 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                public Message2() 
                { 
                        _sqlMessage = new SqlMessage(); 
                } 
 
                /// <summary> 
                /// 获取Message 
                /// </summary> 
                /// <returns></returns> 
                public List<MessageModel> Select() 
                { 
                        return _sqlMessage.Get(); 
                } 
 
                /// <summary> 
                /// 插入Message 
                /// </summary> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public bool Add(MessageModel mm) 
                { 
                        return _sqlMessage.Insert(mm); 
                } 
        } 
}
client
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
 
using Pattern.Adapter; 
 
public partial class Adapter : System.Web.UI.Page 

        protected void Page_Load(object sender, EventArgs e) 
        { 
                IMessage m; 
 
                m = new Message(); 
                Response.Write("类适配器方式<br />"); 
                Response.Write(m.Add(new MessageModel("插入", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(m.Select()[0].Message + " " + m.Select()[0].PublishTime.ToString()); 
                Response.Write("<br /><br />"); 
 
                m = new Message2(); 
                Response.Write("对象适配器方式<br />"); 
                Response.Write(m.Add(new MessageModel("插入", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(m.Select()[0].Message + " " + m.Select()[0].PublishTime.ToString()); 
                Response.Write("<br />"); 
        } 
}
运行结果
类适配器方式
True
SQL方式获取Message 2007-4-8 20:59:29

对象适配器方式
True
SQL方式获取Message 2007-4-8 20:59:29

参考
http://www.dofactory.com/Patterns/PatternAdapter.aspx

OK
[源码下载]

本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344517,如需转载请自行联系原作者

乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)相关推荐

  1. 【设计模式】适配器模式 Adapter Pattern

    适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...

  2. 二十三种设计模式[6] - 适配器模式(Adapter Pattern)

    前言 适配器,属于类结构型模式.<设计模式 - 可复用的面向对象软件>一书中将之描述为" 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可 ...

  3. 【设计模式】—— 适配器模式Adapter

    模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...

  4. 设计模式(七): 通过转接头来观察适配器模式(Adapter Pattern)

    在前面一篇博客中介绍了"命令模式"(Command Pattern),今天博客的主题是"适配器模式"(Adapter Pattern).适配器模式用处还是比较多 ...

  5. 极速理解设计模式系列:6.适配器模式(Adapter Pattern)

    四个角色:目标抽象类角色(Target).目标对象角色(Adapter).源对象角色(Adaptee).客户端角色(Client) 目标抽象类角色(Target):定义需要实现的目标接口 目标对象角色 ...

  6. 适配器模式 Adapter Pattern

    适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的 ...

  7. 『设计模式』适配器模式(Adapter)

    23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...

  8. C++设计模式之适配器模式(adapter)(结构型)

    一.结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. 结构型模式可以分 ...

  9. php本地服务手机适配器,php适配器模式(adapter pattern)

    下午陪家人和小孩,晚上练起来. /* The adapter pattern allows the interface of an existing class to be used from ano ...

最新文章

  1. 陈启峰:人工智能生成图像技术,未来或能取代电影特效
  2. 小波的秘密10_图像处理应用:图像增强
  3. 电容屏物体识别_兆易创新的传感器布局:电容/光学/超声指纹/ToF全面发力
  4. linux各种查看端口号
  5. Android 代码执行Linux Shell小记
  6. Python--操作数据库class
  7. JAVA锁之可重入锁和递归锁及示例代码
  8. mysql执行语句出来全是问号_为什么mysql运行代码后结果栏中的中文全部变成问号?...
  9. JavaNIO编程基础-图解JavaNIO内存模型
  10. 81、通过secureCRT连接虚拟机时几种连接方式的不同
  11. 基于JSP的图书管理系统
  12. 在Qt工程中调用GmSSL
  13. 数据类产品设计和实现思路
  14. 优点电子签章系统无法解除_电子签章常见问题解答
  15. 基于STM32控制的PS2摇柄模块—双轴按键摇杆控制器控制TFTLCD
  16. c语言如何画函数图形,c语言绘制函数曲线
  17. 网站内容收录不稳定/不收录的原因分析
  18. Guava中这些Map的骚操作,让我的代码量减少了50%
  19. java设计模式之【工厂模式】
  20. Android 返回桌面的操作

热门文章

  1. java:基本数据类型
  2. oracle:自定义函数
  3. oracle:导入数据,遇到oracle错误 959
  4. 将PDF Expert设置为默认打开程序的操作步骤
  5. WKWebView中经常用到的操作
  6. SpringBoot开发环境搭建
  7. linux下软件包管理-源码包-二进制包
  8. hadoop程序开发 --- python
  9. Java 游泳时长计算
  10. C语言 将字符串中数字字符全部删除