电源适配器使我们接触的最多的适配器,手机的变压器也可以说是适配器的,都是用于改变电压、电流变换(整流)的电力电子器件。家庭使用的电压也是在变电站的改变下才变成我们使用的额定电压,不然传输电压远高于我们的需求。总之适配器的出现,是联系现实存在事物转变成我们能使用、利用的重要工具。就算是做起了牵红线的中间介绍作用。
定义:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
用我们的大白话来说就是明明摆在那里,看的见、摸得着,就是不能为我所用,只能干着急。还不能随意的改变,只能顺其自然,想办法去迎合它,此时必须要通过一定的介质来沟流-适配器模式应运而生。
作用:
通过这样的改变就能使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。书上描述的在不改变现状的情况下,最好的办法就是想办法找个适配器。具体应用到系统开发中,就是系统的数据和行为都正确,但接口不符时,我们应该考虑适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
常出现的就是复用,我们知道这样不仅能节省大量时间、人力,还能最大程度上节省成本。一些重复使用的类,但是有时接口不完全一致,此时就需要适配器解决这样的问题。但是我们尽可能的少用或不用。
Target:目标抽象类 Adapter:适配器类
Adaptee:适配者类 Client:客户类
代码实现:
virtual是告诉其他想继承与他的类,你可以重写我的方法或属性。
override表示重写。
Target
class Target
{
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; line-height: 16.6154px; font-family: 'Courier New' !important;"><pre name="code" class="csharp"> // 使用virtual修饰以便子类可以重写
public virtual void Request() { Console.WriteLine("普通请求!"); } }
Adaptee
//Adatee
class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("特殊请求!");
}
}
Adapter
//通过在内部包装一个Adaptee对象,捌元接口转换目标接口
class Adapter:Target
{
private Adaptee adaptee = new Adaptee();
public override void Request()
{
adaptee.SpecificRequest ();
}
}
客户端代码:
static void Main(string[] args)
{
Target target = new Adapter();
target.Request();
<pre name="code" class="csharp"> //调用的是Target的Request()
Console.Read (); }
总结:
使用已经存在的类时,如果他的接口(方法)和你所要求的不同时就需要考虑适配器了。也就是接口不同时要用用他。但我们需要注意的是尽可能避免使用他,也可以说是无奈之举,软件维护存在不同的人群不同的环境,难免会造成功能类似而接口不同的但是尽量在双方不太容易修改时才使用。