适配器模式通过转换接口使不兼容类协同工作,C++中推荐对象适配器;目标接口IDrawer定义drawCircle,Adaptee LegacyShapeRenderer提供renderCircleAt。
适配器模式用于让两个接口不兼容的类能够协同工作,核心是“转换接口”。C++ 中常用类适配器(继承)或对象适配器(组合)实现,推荐对象适配器——更灵活、符合合成复用原则。
这是客户端期望使用的统一接口。例如,一个绘图系统只认 IDrawer:
class IDrawer {
public:
virtual ~IDrawer() = default;
virtual void drawCircle(double x, double y, double r) = 0;
};假设第三方库提供了一个 LegacyShapeRenderer,接口完全不同:
class LegacyShapeRenderer {
public:
void renderCircleAt(double centerX, double centerY, double radiusInPixels) {
std::cout << "Legacy: drawing circle at ("
<< centerX << ", " << centerY
<< ") with radius " << radiusInPixels << "\n";
}
};通过组合持有 LegacyShapeRenderer 实例,并在 drawCircle 中转调其方法。注意单位/参数语义的转换(如这里假设像素单位无需换算):
class DrawerAdapter : public IDrawer {
private:
LegacyShapeRenderer legacyRenderer;
public:
void drawCircle(double x, double y, double r) override {
// 转换调用:参数名、顺序、含义都做了适配
legacyRenderer.renderCircleAt(x, y, r);
}
};
客户端只依赖 IDrawer,完全 unaware 底层是新实现还是旧库封装:
int main() {
DrawerAdapter adapter;
IDrawer* drawer = &adapter;
drawer->drawCircle(10.5, 20.0, 5.0); // 输出 Legacy 日志
return 0;
}
若需运行时切换被适配对象(比如支持多个 legacy 类),可将 改为指针或智能指针,并在构造函数注入;类适配器(继承
LegacyShapeRendererLegacyShapeRenderer)也可行,但 C++ 不支持多继承时受限,且紧耦合 legacy 类的实现细节。
# c++
# Object
# 封装
# 构造函数
# 指针
# 继承
# 多继承
# 接口
# 对象
# 不兼容
# 客户端
# 并在
# 这是
# 协同工作
# 多个
# 已有
# 不支持
# 可将
# 第三方
相关文章:
兔展官网 在线制作,怎样制作微信请帖?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
香港服务器如何优化才能显著提升网站加载速度?
如何访问已购建站主机并解决登录问题?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
黑客如何通过漏洞一步步攻陷网站服务器?
如何通过主机屋免费建站教程十分钟搭建网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
存储型VPS适合搭建中小型网站吗?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在新浪SAE免费搭建个人博客?
,石家庄四十八中学官网?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何基于云服务器快速搭建网站及云盘系统?
平台云上自主建站:模板化设计与智能工具打造高效网站
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何在阿里云高效完成企业建站全流程?
制作农业网站的软件,比较好的农业网站推荐一下?
如何选择高效便捷的WAP商城建站系统?
中山网站推广排名,中山信息港登录入口?
如何快速搭建自助建站会员专属系统?
已有域名和空间如何快速搭建网站?
网站图片在线制作软件,怎么在图片上做链接?
如何通过宝塔面板实现本地网站访问?
长沙做网站要多少钱,长沙国安网络怎么样?
建站之星上传入口如何快速找到?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
三星网站视频制作教程下载,三星w23网页如何全屏?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
名字制作网站免费,所有小说网站的名字?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
制作网站怎么制作,*游戏网站怎么搭建?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
济南专业网站制作公司,济南信息工程学校怎么样?
太原网站制作公司有哪些,网约车营运证查询官网?
建站三合一如何选?哪家性价比更高?
家庭建站与云服务器建站,如何选择更优?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站主机默认首页配置指南:核心功能与访问路径优化
如何彻底删除建站之星生成的Banner?
如何通过FTP空间快速搭建安全高效网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何在橙子建站上传落地页?操作指南详解
如何在阿里云购买域名并搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。