Adapter 适配器模式
适配器模式:适配器模式允许将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
面向接口编程的原则:尽量将程序之中的参数,返回值,变量全都使用接口来代替。
1:类适配器模式: 带来高耦合(不推荐)
2:对象适配器模式:送耦合(推荐)
适配器模式的应用:
在.net之中复用com对象:
--com对象不符合.net对象的接口
--需要使用tlbimp.exe来创建一个runtime callable wrapper(RCW)以使其能够符合.net对象的接口。
.net数据访问类(Adapter变体)
--各种数据库并没有提供Dataset接口
--使用dbDataAdapter可以将任何各种数据库访问到的数据适配到DataSet对象上
集合类中队现有对象的排序
--现有对象未实现IComparable接口
--实现一个排序适配器(继承IComarable接口),然后在其compare方法中对两个对象进行比较.
稳定部分:
interface Istack // 客户期望的接口,这里被适配的对象是一个ArrayList对象
{
public void Push(object item);
public object Pop();
public object Peek();
}
变化部分:
//对象适配器(推荐使用)
class AdapterA: Istack //适配对象
{
ArrayList adpatee; //被适配的对象

public AdapterA()
{
}

public void Push(object item)
{
adpatee.Add(item);
}

public object Pop()
{
return adpatee.RemoveAt(adpatee.Count - 1);
}

public object Peek()
{
return adpatee[adpatee.Count - 1];
}
}

//类适配器
class AdapterB: ArrayList,Istack //适配对象
{
public AdapterB()
{
}

public void Push(object item)
{
this.Add(item);
}

public object Pop()
{
return this.RemoveAt(this.Count - 1);
}

public object Peek()
{
return this[this.Count - 1];
}
}
主程序:
//对象适配器优于类适配器
public static void Main()
{
AdapterA a = new AdapterA();
a.Pop();
a.Push(item);
a.Peek();

AdapterB b = new AdapterB();
b.Pop();
b.Push(item);
b.Peek();

}
面向接口编程的原则:尽量将程序之中的参数,返回值,变量全都使用接口来代替。
1:类适配器模式: 带来高耦合(不推荐)
2:对象适配器模式:送耦合(推荐)
适配器模式的应用:
在.net之中复用com对象:
--com对象不符合.net对象的接口
--需要使用tlbimp.exe来创建一个runtime callable wrapper(RCW)以使其能够符合.net对象的接口。
.net数据访问类(Adapter变体)
--各种数据库并没有提供Dataset接口
--使用dbDataAdapter可以将任何各种数据库访问到的数据适配到DataSet对象上
集合类中队现有对象的排序
--现有对象未实现IComparable接口
--实现一个排序适配器(继承IComarable接口),然后在其compare方法中对两个对象进行比较.
稳定部分:






变化部分:

















































主程序:














【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?