Mike.Jiang 发表于 2012-12-29 11:12:34

适配器模式(Adapter)

<div id="cnblogs_post_body">1概述
遇到这样的问题:需要用到已有的功能,功能的数据和行为都是正确的,但是功能的调用繁杂并要在多个地方调用。在正常的思维下,我们将功能的调用写在一个公共类的一个方法中,这样我们就已经达到了隔离已有复杂功能目的。但这样做有如下缺点:
1>如果这个类有多个公开的方法,则不能对这个类进行统一的管理;
2>如果这个类中的方法相互依赖很强,那么写公共方法也会比较烦;
最后,我们用OO的语言开发,应该以OO的思想来解决这个问题。上述的问题,通过大师们的总结,已经形成一个统一的解决模式:适配器模式;
2GOF中的定义
2.1 意图:
  将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——GOF
2.2 对象适配器结构图
http://pic002.cnblogs.com/images/2012/323742/2012091022592170.jpg
2.3 说明:
Adaptee:第三方组件或旧系统中复杂的类;
Target:新系统所希望的接口;
Adapter:将Adaptee转换成Target。
3 示例实现
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifView 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);      }    }
页: [1]
查看完整版本: 适配器模式(Adapter)