适配器模式是一种结构性模式,将一个类的接口转换成使用者希望的另一个接口,一般用在你想使用已存在但是接口不符合你需求的情况,或者想创建一个复用类,该类可以与其他不想关的类或不可预见类协同工作。
类适配器使用多重继承对一个接口与另一个接口进行匹配。
namespace Designmode.Adapter
{
/// <summary>
/// 当前业务所期待的接口,抽象类or接口
/// </summary>
public interface ITarget
{
/// <summary>
/// 请求方法
/// </summary>
void Request();
}
}
namespace Designmode.Adapter
{
/// <summary>
/// 适配者,被访问和适配的现存组件库中的组件接口。
/// </summary>
public class Adaptee
{
/// <summary>
/// 指定请求
/// </summary>
public virtual void SpecificRequest()
{
Console.WriteLine($"Specific Request");
}
}
}
namespace Designmode.Adapter
{
/// <summary>
/// 装换器,继承了适配者方法,并实现了所期待的接口
/// </summary>
public class ClassAdapter : Adaptee, ITarget
{
/// <summary>
/// 请求
/// </summary>
public void Request()
{
Console.WriteLine("do something");
base.SpecificRequest();
}
}
}
对象匹配器依赖于对象组合,由于低耦合,所以多使用此种方法实现适配器模式
namespace Designmode.Adapter
{
/// <summary>
/// 对象适配器模式
/// </summary>
public class ObjectAdapter : ITarget
{
/// <summary>
/// 适配者
/// </summary>
private Adaptee _adaptee = null;
/// <summary>
/// 对象适配
/// </summary>
/// <param name="adaptee"></param>
public ObjectAdapter(Adaptee adaptee)
{
this._adaptee=adaptee;
}
/// <summary>
/// 请求
/// </summary>
/// <exception cref="NotImplementedException"></exception>
public void Request()
{
Console.WriteLine("do something.");
this._adaptee.SpecificRequest();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Adapter;
namespace Designmode
{
class Program
{
#region 适配模式
//类适配器模式
ClassAdapter classAdapter = new ClassAdapter();
classAdapter.Request();
//对象适配器模式
ObjectAdapter objAdapter = new ObjectAdapter(new Adaptee());
objAdapter.Request();
#endregion
}
}
}