适配器设计模式

 

适配器设计模式是把一个类的接口转化成客户端期望的接口,从而使原本接口不匹配的两个类能一起工作。

实际中这种场景很容易碰到,比如A类型手机充电器需要10V电压充电,B类型手机需要15V电压充电。A类型手机的充电器价格非常昂贵,而B类型的充电器价格低廉。市场就有可能出现把B型充电器转换成A型手机匹配的适配器。

适配器设计模式有两种:

类适配器:使用继承实现接口转换。

实例适配器:使用组合实现接口转换。

类适配器

类图:
类适配器设计的角色:

源:被适配的类。

目标:客户期望的接口.由于适配器需要继承源。所以目标必须是接口。

适配器:把源接口转换成目标接口。适配器需要继承源。

代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Hbb0b0.DesignPatter

{

/// <summary>

/// 源:被适配者

/// </summary>

public class Adaptee

{

/// <summary>

/// 响应特殊的请求

/// </summary>

public void SpecialRequest()

{

Console.WriteLine("Call SpecialRequest");

}

}

/// <summary>

/// 目标:客户端期望的接口。必须是接口

/// </summary>

public interface ITarget

{

/// <summary>

/// 客户端期望的响应请求方法

/// </summary>

void Request();

}

/// <summary>

/// 适配器

/// </summary>

public class ClassAdapter : Adaptee,ITarget

{

#region ITarget 成员

/// <summary>

/// 实现期望的接口

/// </summary>

public void Request()

{

base.SpecialRequest();

}

#endregion

}

}

调用示例:

//类适配器

Console.WriteLine("类适配器");

ITarget iTarget = new ClassAdapter();

iTarget.Request();

实例适配器

类图
实例适配器设计的角色:

源:被适配的类。

目标:客户期望的接口.由于适配器中包装源。所以目标可以是类,抽象类,接口。

适配器:把源接口转换成目标接口。适配器包装源。

代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Hbb0b0.DesignPatter

{

/// <summary>

/// 源:被适配者

/// </summary>

public class Adaptee

{

/// <summary>

/// 响应特殊的请求

/// </summary>

public void SpecialRequest()

{

Console.WriteLine("Call SpecialRequest");

}

}

/// <summary>

/// 目标:客户端可以期望接口,可以是具体类也可以是抽象类,

/// 也可以是接口

/// </summary>

public class Target

{

/// <summary>

/// 期望的方法

/// </summary>

virtual public void Request()

{

}

}

}

/// <summary>

/// 适配器:内部包装源,把源接口转换成目标接口

/// </summary>

public class InstanceAdapter : Target

{

private Adaptee adaptee = null;

public InstanceAdapter(Adaptee adt )

{

adaptee = adt;

}

public override void Request()

{

adaptee.SpecialRequest();

}

}

}

调用示例:

//对象适配器

Console.WriteLine("对象适配器");

Adaptee adt=new Adaptee ();

Target target = new InstanceAdapter(adt );

target.Request();

原文地址:https://www.cnblogs.com/hbb0b0/p/1950842.html