设计模式之适配器模式

什么是适配器模式:将一种接口通过适配器转换成另一种接口。适配器相当是中间转换。

一个简单的适配器

下面,我们将一只火鸡变成一只鸭子

实现

鸭子:

    public interface Duck
    {
        void quack();
        void fly();
    }

    class MallardDuck : Duck
    {
        public void fly()
        {
            Console.WriteLine("fly");
        }

        public void quack()
        {
            Console.WriteLine("quack");
        }
    }

火鸡:

    interface Turkey
    {
        void gobble();
        void fly();
    }

    class WildTurkey : Turkey
    {
        public void fly()
        {
            Console.WriteLine("fly");
        }

        public void gobble()
        {
            Console.WriteLine("gobble");
        }
    }

适配器:

    class TurkeyAdapter : Duck
    {
        public TurkeyAdapter(Turkey turkey)
        {
            this.turkey = turkey;
        }

        private Turkey turkey;
        public void fly()
        {
            turkey.fly();
        }

        public void quack()
        {
            turkey.gobble();
        }
    }

测试:

        static void Main(string[] args)
        {
            #region 一个简单的适配器模式
            MallardDuck duck=new MallardDuck();

            WildTurkey turkey=new WildTurkey();

            Duck turkeyDuck=new TurkeyAdapter(turkey);

            turkeyDuck.fly();
            turkeyDuck.quack();

            #endregion
            Console.ReadKey();
        }

适配器使用过程

  • 1.客户通过调用目标适配器的方法对适配器发出请求
  • 2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。
  • 3.客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。

客户和被适配器是解耦的,一个不知道另一个

定义

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。
适配器模式有良好的OO设计原则:使用对象组合,以修改的接口包装被适配者。这样还有一个优点,被适配的任何子类都可以搭配着适配器使用。