适配器模式

使用适配器设计模式,可以通过制定固定的接口、接口实体、处理类,在需要时可通过这个接口来扩展新的接口实体,使用处理类处理这个新接口实体。

实现新接口实体有三种方式“类适配器模式、对象适配器模式、接口适配器模式”。

以下C#控制台代码:

using System;

namespace ConsoleApp1
{

    // 制定
    public interface IVga
    {
        void Projection();
        void A();
        void B();
    }

    public class VgaImpl : IVga
    {
        public void Projection()
        {
            Console.WriteLine("vga 播放PPT");
        }
        public void A()
        {
            Console.WriteLine("vga 方法 a");
        }
        public void B()
        {
            Console.WriteLine("vga 方法 b");
        }
    }

    public class Projector
    {
        public void projection<T>(T t)
        {
            if (t is IVga)
            {
                Console.WriteLine("开始投影");
                IVga v = (IVga)t;
                v.Projection();
            }
            else
            {
                Console.WriteLine("接口不匹配,无法投影");
            }
        }
    }

    // 扩展
    public interface IUsb
    {
        void ShowPPT();
    }

    public class UsbImpl : IUsb
    {
        public void ShowPPT()
        {
            Console.WriteLine("usb 播放PPT");
        }
    }

    // 一、类适配器模式(通过多重继承目标接口和被适配者类方式来实现适配)
    public class AdapterUSB2VGA : UsbImpl, IVga
    {
        public void Projection()
        {
            this.ShowPPT();
        }
        public void A()
        {
            this.A();
        }
        public void B()
        {
            this.B();
        }
    }

    // 二、对象适配器模式(对象适配器使用组合方式实现适配)
    public class AdapterUSB2VGA2 : IVga
    {
        IUsb u = new UsbImpl();
        public void Projection()
        {
            u.ShowPPT();
        }
        public void A()
        {
            this.A();
        }
        public void B()
        {
            this.B();
        }
    }

    // 三、接口适配器模式(不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。)
    public abstract class AdapterUSB2VGA3 : IVga
    {
        IUsb u = new UsbImpl();
        public void Projection()
        {
            u.ShowPPT();
        }
        public abstract void A();
        public abstract void B();
    };

    public class AdapterUSB2VGA3Impl : AdapterUSB2VGA3
    {
        public override void A()
        {
            this.A();
        }
        public override void B()
        {
            this.B();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 处理类
            Projector p1 = new Projector();
            // 原有
            IVga a = new VgaImpl();
            // 类适配器模式
            IVga b = new AdapterUSB2VGA();
            // 对象适配器模式
            IVga c = new AdapterUSB2VGA2();
            // 接口适配器模式
            IVga d = new AdapterUSB2VGA3Impl();

            p1.projection(a);
            p1.projection(b);
            p1.projection(c);
            p1.projection(d);
        }
    }
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值