为了使得接口不兼容的类可以在一起工作,使用适配器模式
分为两类适配器:
- 类适配器:在C# 中,适配器继承Adaptee(被适配者),实现Target(目标)接口。该适配器可重定义Adaptee的部分行为。
- 对象适配器:适配器引用Adaptee(被适配者),实现Target(目标)接口。该适配器允许与Adaptee及其子类同时工作,但是重定义Adaptee的行为比较困难。
1.类适配器:
using System;
namespace Adapter
{
/// <summary>
/// 英文适配为中文
/// </summary>
class LanguageAdapter : EnglishAdaptee, IChineseTarget
{
//请求
public string Request()
{
string word = this.EnglishWord();
return Translate(word);
}
private string Translate(string word)
{
return word+ "翻译为:英语";
}
}
/// <summary>
/// 中文目标
/// </summary>
interface IChineseTarget
{
//请求
string Request();
}
/// <summary>
/// 英文被适配者
/// </summary>
class EnglishAdaptee
{
public string EnglishWord()
{
return "English";
}
}
}
调用:
using System;
namespace Adapter
{
class Program
{
static void Main(string[] args)
{
//类适配器
IChineseTarget chinese = new LanguageAdapter();
//通过适配器获取请求
string result = chinese.Request();
Console.WriteLine(result);
Console.Read();
}
}
}
结果:
2.对象适配器
using System;
namespace Adapter
{
/// <summary>
/// 英文适配为中文
/// </summary>
class ObjectLanguageAdapter : IObjectChineseTarget
{
//请求
public string Request()
{
//调用对象方法来请求
ObjectEnglishAdaptee englishAdaptee =new ObjectEnglishAdaptee();
string word = englishAdaptee.EnglishWord();
return Translate(word);
}
private string Translate(string word)
{
return word + "翻译为:英语";
}
}
/// <summary>
/// 中文目标
/// </summary>
interface IObjectChineseTarget
{
//请求
string Request();
}
/// <summary>
/// 英文被适配者
/// </summary>
class ObjectEnglishAdaptee
{
public string EnglishWord()
{
return "English";
}
}
}
调用:
//对象适配器
IObjectChineseTarget objectChinese = new ObjectLanguageAdapter();
//通过适配器获取请求
string result1 = objectChinese.Request();
Console.WriteLine(result1);
Console.Read();
结果:
参考资料:《设计模式-可复用面对对象软件的基础》