代码改变世界

适配器模式(Adapter)

2012-09-11 08:05  Mike.Jiang  阅读(560)  评论(0编辑  收藏  举报

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

2.3 说明:
Adaptee:第三方组件或旧系统中复杂的类;
Target:新系统所希望的接口;
Adapter:将Adaptee转换成Target。

3 示例实现

View Code
    /// <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);
        }
    }

4 总结
总的来说,适配器模式就是在不改变原有代码的前提下,将不兼容或复杂的接口,转换成我们需要的接口。