适配器模式就相当于一个翻译,来处理两个人语言之间的障碍。

下面文字来源于深入浅出设计模式,进一步了解什么是适配器模

假设有一个系统,你希望他能和一个新的厂商类库搭配使用起来,但是新的厂商所设计的接口

不同于旧常桑的接口,

 

你不想改变现有的代码,解决这个问题(而且你也不能改变厂商的代码)。所以该怎么办呢

这个嘛,你可以写一个类,将新厂商的 接口转接成你所期望的接口

 

这个适配器工作起来就如同一个中间商,他将客户所发出的请求转换成厂商类能够理解的请求

 

 

实现代码:

现有系统代码:

     //鸭子接口
    public interface Duck
    {
        string Quack();
        string Fly();
    }
    //绿头鸭子类
    public class MallardDuck:Duck
    {
        public MallardDuck(){}

        public string Quack()
        {
            return "I'm Quack";
        }

        public string Fly()
        {
            return "I'm can flying";
        }
    }

 

 厂商接口

 //火鸡接口
    public interface Turkey
    {
        string Gobble();
        string Fly();
    }
    //火鸡
    public class WildTurkey:Turkey
    {
        public WildTurkey(){}
        public string Gobble()
        {
            return "I'm Gobble";
        }
        public string Fly()
        {
            return "I'm flying a short distance";
        }
    }

 

 实现厂商和原有系统对话

 //火鸡适配器
    public class TurkeyAdapter:Duck
    {
        Turkey turkey;

        public TurkeyAdapter(Turkey trukey)
        {
            this.turkey = trukey;
        }

        public string Quack()
        {
            return turkey.Gobble();
        }

        public string Fly()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 5;i++)
            {
                sb.Append(turkey.Fly());
                sb.Append("\n");
            }
            return sb.ToString();
        }

    }

 

 使用示例

  public class DuckTest
    {
        public static void Main()
        {
            MallardDuck duck = new MallardDuck();//创建一个鸭子

            WildTurkey turkey = new WildTurkey();//创建一个火鸡

            Duck turkeyAdapter = new TurkeyAdapter(turkey);//将火鸡放到适配器中,是它看起来像只鸭子

            Console.WriteLine("鸭子和火鸡开始对话了");

            Console.WriteLine("火鸡说" + turkey.Gobble());
            Console.WriteLine("火鸡说" + turkey.Fly());

            Console.WriteLine("鸭子说" + duck.Quack());
            Console.WriteLine("鸭子说" + duck.Fly());

            Console.WriteLine("适配器说" + turkeyAdapter.Quack());//鸭子还是一直以为我是只鸭子,其实我是只火鸡
            Console.WriteLine("适配器说" + turkeyAdapter.Fly());//适配器已经实现接口之间的交流

        }
    }

 

 

posted on 2011-01-26 12:47  jackdesk  阅读(124)  评论(0编辑  收藏  举报