本帖最后由 剑弑 于 2018-11-14 16:15 编辑
今天无聊找了份适配器模式的资料重温了下,顺便写了个适配器模式出来,供大家评判评判
今天写的这个适配器模式是以手机充电器为例来写的,现今社会手机充电器有很多,但主流的充电器也就分为两种一种是安卓手机充电器,一种苹果(ios)手充电器。手机充电器相信大家都用过,有些人还用两种,相信大家都有会遇到在外面手机没电了想找充电器充电,而自己的没带身边有带充电器的朋友充电器又不适合;这个时候充电器适配器就用得上了,我们可以用适配器上的接口去连接自己的手机,拿朋友的充电器去连接适配器上的接口;这样我们就可以为手机充上电了。
好了,废话不多说直接开始上代码吧!!!
首先我们先新建一个安卓手机充电器类和一个苹果手机的充电器类
[C#] 纯文本查看 复制代码 class AndroidUSB
{
public void AndroidCharger()
{
Console.Write("安卓手机充电中\r\n");
}
}
[C#] 纯文本查看 复制代码 class IosUSB
{
public void IosCharger()
{
Console.Write("ios手机充电中\r\n");
}
}
然后我们再来实现一个公共的接口类
[C#] 纯文本查看 复制代码 interface ITarget
{
void Charger();
}
好了,现在我们有了两种手机充电器的类和一个公共的接口类了;
哪么现在我们差什么呢? 对就是差充电器类和接口类的对接,也就是我们说的适配器接口。
[C#] 纯文本查看 复制代码 class AndroidChargerAdapter:AndroidUSB,ITarget
{
public void Charger()
{
this.AndroidCharger();
}
}
[C#] 纯文本查看 复制代码 class IosChargerAdapter:IosUSB,ITarget
{
public void Charger()
{
this.IosCharger();
}
}
现在我们把适配器接口也实现了,那我们就来看看如何把手机接上去充电吧
[C#] 纯文本查看 复制代码 static void Main(string[] args)
{
ITarget target=new AndroidChargerAdapter();
target.Charger();
target = new IosChargerAdapter();
target.Charger();
Console.Read();
}
输出结果:[C#] 纯文本查看 复制代码 class AndroidChargerAdapterClass : TargetClass
{
private AndroidUSB AUSB=new AndroidUSB();
public override void Charger()
{
AUSB.AndroidCharger();
}
} [AppleScript] 纯文本查看 复制代码 class IosChargerAdapterClass:TargetClass
{
private IosUSB iUSB=new IosUSB();
public override void Charger()
{
iUSB.IosCharger();
}
} [AppleScript] 纯文本查看 复制代码 class TargetClass
{
public virtual void Charger()
{
Console.Write("充电中");
}
}
在使用适配器时我们中要告诉接口类我们要使用的充电器种类就可以了,别的就不用我们去考虑,系统会自己帮我们去选择合适的接口为我们的手机充电。
其实适配器是有两种表现形式的上面我讲的是对象适配器的表现形式,而另一种类适配器的表现形式我就不多说了只为大家贴上代码吧,相信聪明的你们一看就会
[C#] 纯文本查看 复制代码 class AndroidChargerAdapterClass : TargetClass
{
private AndroidUSB AUSB=new AndroidUSB();
public override void Charger()
{
AUSB.AndroidCharger();
}
}
[C#] 纯文本查看 复制代码 class IosChargerAdapterClass:TargetClass
{
private IosUSB iUSB=new IosUSB();
public override void Charger()
{
iUSB.IosCharger();
}
}
[AppleScript] 纯文本查看 复制代码 class TargetClass
{
public virtual void Charger()
{
Console.Write("充电中");
}
}
[AppleScript] 纯文本查看 复制代码 static void Main(string[] args)
{
TargetClass targetClass = new IosChargerAdapterClass();
targetClass.Charger();
targetClass = new AndroidChargerAdapterClass();
targetClass.Charger();
Console.Read();
}
欢迎大家多多评判评判,指出不足处
|