使用适配器设计模式,可以通过制定固定的接口、接口实体、处理类,在需要时可通过这个接口来扩展新的接口实体,使用处理类处理这个新接口实体。
实现新接口实体有三种方式“类适配器模式、对象适配器模式、接口适配器模式”。
以下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);
}
}
}