1、类继承的方式实现适配器模式
1.1、结构图
1.2、代码
/********************************************************************
* 意图:将一个类的接口转换成客户希望的另外一个接口。Adapter
* 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
*
* 适用性:
* 1、你想使用一个已经存在的类,而它的接口不符合你的需求。
* 2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类
* (即那些接口可能不一定兼容的类)协同工作。
* 3、(仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不
* 可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
*
* 协作:Client 在Adapter实例上调用一些操作。接着适配器调用Adapter的操作
* 实现这个请求。
*
* 作者:董怀信
* 日期:2009-05-29
* *******************************************************************/
using System;
namespace DesignPattern.StructuralPattern.AdapterClass
{
/// <summary>
/// 对Adapter与Target的接口进行适配.
/// </summary>
public class Adapter:Adaptee,Target
{
#region Target Members
public void Request()
{
this.SpecificRequest();
}
#endregion
}
/// <summary>
/// 定义一个已经存在的接口,这个接口需要适配。
/// </summary>
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("Adaptee:SpecificRequest");
}
}
/// <summary>
/// 定义Client使用的与特定领域相关的接口。
/// </summary>
public interface Target
{
void Request();
}
/// <summary>
/// 与符合Target接口的对象协同。
/// </summary>
public class Client
{
public void Test()
{
Target target = new Adapter();
target.Request();
}
}
}
2、对象组合的形式实现适配器模式
2.1、结构图
2.2、代码
/********************************************************************
* 意图:将一个类的接口转换成客户希望的另外一个接口。Adapter
* 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
*
* 适用性:
* 1、你想使用一个已经存在的类,而它的接口不符合你的需求。
* 2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类
* (即那些接口可能不一定兼容的类)协同工作。
* 3、(仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不
* 可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
*
* 协作:Client 在Adapter实例上调用一些操作。接着适配器调用Adapter的操作
* 实现这个请求。
*
* 作者:董怀信
* 日期:2009-05-29
* *******************************************************************/
using System;
namespace DesignPattern.StructuralPattern.AdapterObject
{
/// <summary>
/// 对Adapter与Target的接口进行适配.
/// </summary>
public class Adapter:Target
{
private Adaptee m_adaptee;
public Adapter()
{
m_adaptee = new Adaptee();
}
#region Target Members
public void Request()
{
m_adaptee.SpecificRequest();
}
#endregion
}
/// <summary>
/// 定义一个已经存在的接口,这个接口需要适配。
/// </summary>
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("Adaptee:SpecificRequest();");
}
}
/// <summary>
/// 定义Client使用的与特定领域相关的接口。
/// </summary>
public interface Target
{
void Request();
}
/// <summary>
/// 与符合Target接口的对象协同。
/// </summary>
public class Client
{
public void Test()
{
Target targetObject = new Adapter();
targetObject.Request();
}
}
}