适配器模式

最近重读设计模式,理解更上一层楼。

 

 

 

为以便日后翻阅之需特坚持写博客,记录技术点滴,本设计模式系列源码均参考 http://c.biancheng.net/view/1317.html java语言版本的23种设计模式,

同时方便没有java基础的同学参阅故翻译成C#系列。

java系列对设计模式的应用说明,模式的总结均有详细说明,此系列文章仅仅作翻阅之用,如需要详细理解请参阅上述链接。

 

  //适配器模式(Adapter)包含以下主要角色。
    //目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
    //适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
    //适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
    /// <summary>
    /// 适配者模式原型
    /// </summary>
    interface Target
    {
        void Request();
    }
    public class Adaptee
    {
        public void SpecificRequest()
        {
            Console.WriteLine("适配者中的业务代码被调用!");
        }
    }
    public class ClassAdapter : Adaptee, Target
    {
        public void Request()
        {
            SpecificRequest();
        }
    }
    public class ObjectAdapter : Target
    {
        private Adaptee adaptee;
        public ObjectAdapter(Adaptee adaptee)
        {
            this.adaptee = adaptee;
        }
        public void Request()
        {
            adaptee.SpecificRequest();
        }
    }

    #region 适配器模式示例

    interface Motor
    {
        void Drive();
    }

    /// <summary>
    /// 适配者1 电能发动机
    /// </summary>
    class ElectricMotor
    {
        public void ElectricDrive()
        {
          Console.WriteLine("电能发动机驱动汽车!");
        }
    }

    /// <summary>
    /// 适配者2 光能发动机
    /// </summary>
    class OptiocalMotor
    {
        public void OptiocalDrive()
        {
            Console.WriteLine("光能发动机驱动汽车!");
        }
    }

    /// <summary>
    /// 电能适配器
    /// </summary>
    class ElectricAdapter : Motor
    {
        private ElectricMotor emotor;

        public ElectricAdapter()
        {
            emotor = new ElectricMotor();
        }
        public void Drive()
        { 
            emotor.ElectricDrive();
        }
    }

    /// <summary>
    /// 光能适配器
    /// </summary>
    class OpticalAdapter : Motor
    {
        private OptiocalMotor motor;

        public OpticalAdapter()
        {
            motor = new OptiocalMotor();
        }

        public void Drive()
        {
            motor.OptiocalDrive();
        }
    }

    #endregion 适配器模式示例

 

posted on 2019-08-03 12:56  迎着风追赶  阅读(114)  评论(0)    收藏  举报

导航