适配器模式(Adapter Pattern)
概念:
是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
问题:
两个功能一致的类,但由于接口的不同不能直接复用,加入适配器做接口转换
意图:
将一个类的接口转换成客户希望的另一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作。
Adaptee:初始角色,实现了我们想要使用的功能,但是接口不匹配
Target:目标角色,定义了客户端期望的接口
Adapter:适配器角色,实现了目标接口。实现目标接口的方法是:内部包含一个Adaptee的对象,通过这个对象调用Adaptee的原有方法实现目标接口。(注:这里说的是对象适配器)
优点:
- 可以让任何两个没有关联的类一起运行。
- 提高了类的复用。
- 增加了类的透明度。
- 灵活性好。
缺点:
- 由于C#不支持多重继承,所以最多只能适配一个适配者类,而且目标类必须是抽象类;
- 采用了类和接口的“双继承”实现方式,带来了不良的高耦合。
例:
讲中文的人同讲英文的人对话时需要一个翻译
实现类图
初始角色:
using System;
public class 外国人
{
virtual public void SayHello()
{
Console.WriteLine("Hello");
}
}
using System;
public class 中国人
{
public void SayHello()
{
Console.WriteLine("你好");
}
}
适配器角色:
/// <summary>
/// 适配器
/// </summary>
public class 翻译器 : 外国人
{
private 中国人 adaptee = new 中国人();
override public void SayHello()
{
adaptee.SayHello();
}
}
测试:
using System;
class Program
{
static void Main(string[] args)
{
外国人 x = new 翻译器();
x.SayHello();
Console.Read();
}
}
输出示例
设计模式------首页