适配器模式主要用于复用一些现存的类,但是接口又与复用环境要求不一致的情况。
适配器模式怎么理解?当有新接口或者新功能需求时,发现我们之前已经有接口或者类实现了这些功能,但我们不可能去改动新需求的接口或者类。这时可能有的人想,这不简单吗,直接复制粘贴好了,复制粘贴确实可以解决,但可能逻辑跟复杂,你去复制粘贴也不是那么简单,再者维护时需要同时维护这两个地方的逻辑。这时我们使用适配器模式就可以完美解决了
示例我的电脑需要投屏到会议室,电脑接口只有HDMI,而会议室的投影接口只有VGA,咋办?这时就要一个适配器,把HDMI转为VGA接口
//已经有的接口
public class HDMI
{
public void BaseConnectDisplay() {
Console.WriteLine("HDMI接口连接显示器成功...");
}
}
//需要实现的接口
public interface VGA
{
void RequireConnectDisplay();
}
//适配器
public class InterfaceAdapter : HDMI, VGA
{
public void RequireConnectDisplay()
{
this.BaseConnectDisplay();
}
}
实现
static void Main(string[] args)
{
Console.WriteLine("准备投屏...");
VGA vga = new InterfaceAdapter();
vga.RequireConnectDisplay();
}
上面适配器模式为类的适配器模式,下面再展示下对象的适配器模式,基本没区别。
public class HDMI
{
public void BaseConnectDisplay() {
Console.WriteLine("HDMI接口连接显示器成功...");
}
}
public class VGA
{
public virtual void RequireConnectDisplay() {
}
}
//适配器
public class InterfaceAdapter : VGA
{
HDMI hdmi = new HDMI();
public override void RequireConnectDisplay()
{
hdmi.BaseConnectDisplay();
}
}
//实现
static void Main(string[] args)
{
Console.WriteLine("准备投屏...");
VGA vga = new InterfaceAdapter();
vga.RequireConnectDisplay();
}
到这里,适配器模式就介绍完了,看透其本质就是对已经代码的复用的一种模式。既然是对已有代码的复用,说明是适配器模式不可能用于一个不是复用代码的环境,千万不能为了用适配器模式而去用,这个模式一般用于,新接口与原接口业务完全一致且两个接口都不容易去修改时的情境下。



