六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 115|回复: 0

适配器模式(Adapter)

[复制链接]

升级  19%

79

主题

79

主题

79

主题

举人

Rank: 3Rank: 3

积分
257
 楼主| 发表于 2012-12-29 11:12:34 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">1  概述
遇到这样的问题:需要用到已有的功能,功能的数据和行为都是正确的,但是功能的调用繁杂并要在多个地方调用。在正常的思维下,我们将功能的调用写在一个公共类的一个方法中,这样我们就已经达到了隔离已有复杂功能目的。但这样做有如下缺点:
1>如果这个类有多个公开的方法,则不能对这个类进行统一的管理;
2>如果这个类中的方法相互依赖很强,那么写公共方法也会比较烦;
最后,我们用OO的语言开发,应该以OO的思想来解决这个问题。上述的问题,通过大师们的总结,已经形成一个统一的解决模式:适配器模式;
2  GOF中的定义
2.1 意图:
  将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——GOF
2.2 对象适配器结构图

2.3 说明:
Adaptee:第三方组件或旧系统中复杂的类;
Target:新系统所希望的接口;
Adapter:将Adaptee转换成Target。
3 示例实现
<div class="cnblogs_code" >View Code <div id="cnblogs_code_open_abc47eaf-351e-4b70-89d9-6c03647a7d21" class="cnblogs_code_hide">    /// <summary>    /// 旧系统中的已有的类    /// </summary>    public class Adaptee    {        public void SendMail(string mailtitle,string mailAddress) { }    }    /// <summary>    /// 客户代码希望的接口    /// </summary>    public interface ISendMail    {        void SendMail();    }    /// <summary>    /// 适配器类    /// </summary>    public class Adapter:ISendMail    {        protected Adaptee adaptee;        public Adapter(Adaptee ada)         {            this.adaptee = ada;        }        private string tilte;        public string Tilte        {            get { return tilte; }            set { tilte = value; }        }        private string address;        public string Address        {            get { return address; }            set { address = value; }        }        public void SendMail()        {            adaptee.SendMail(Tilte, Address);        }    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表