当前位置: 首页 > wzjs >正文

网站后期培训班一般要多少钱视频一键生成网址链接

网站后期培训班一般要多少钱,视频一键生成网址链接,网站建设寻找可以途径,深圳做网站的价格《C Software Design》第七章:Bridge、Prototype 与 External Polymorphism在追求低耦合、高扩展和良好封装的 C 软件架构设计中,如何抽象行为、复用结构、隔离模块依赖是关键。《C Software Design》第七章聚焦三个模式——Bridge、Prototype 和 Extern…

《C++ Software Design》第七章:Bridge、Prototype 与 External Polymorphism

在追求低耦合、高扩展和良好封装的 C++ 软件架构设计中,如何抽象行为、复用结构、隔离模块依赖是关键。《C++ Software Design》第七章聚焦三个模式——BridgePrototypeExternal Polymorphism,它们分别解决“实现-接口解耦”、“抽象复制”和“非侵入式运行时多态”三大类问题。


Guideline 28:用 Bridge 模式解除物理依赖

什么是 Bridge 模式?

Bridge 模式的核心思想是将“抽象接口(Abstraction)”与“具体实现(Implementation)”分离,从而使它们可以独立演化

目的:将接口和实现分离以减少物理依赖、降低构建成本。

UML 示意:
[Abstraction] → [Implementation Interface] ← [ConcreteImplementation]

一个动机示例

假设我们有多个图形类 Shape(如 Circle, Rectangle),它们依赖不同的渲染器(OpenGL、Direct2D):

class OpenGLRenderer {
public:void drawCircle() { std::cout << "OpenGL Circle\n"; }
};class Circle {OpenGLRenderer* renderer;
public:void draw() {renderer->drawCircle();  // 强耦合!}
};

这使得 Circle 绑定了 OpenGLRenderer,难以扩展或替换。

使用 Bridge 解耦

class Renderer {
public:virtual void drawCircle() = 0;
};class OpenGLRenderer : public Renderer {
public:void drawCircle() override {std::cout << "OpenGL: Circle\n";}
};class Shape {
protected:Renderer* renderer;
public:Shape(Renderer* r) : renderer(r) {}virtual void draw() = 0;
};class Circle : public Shape {
public:using Shape::Shape;void draw() override {renderer->drawCircle();}
};

这样,ShapeRenderer 的继承树可独立变化,真正解耦。

Bridge 与 Strategy 的对比

维度BridgeStrategy
抽象目的解耦接口与实现封装算法的变体
运行时行为固定组件间协作结构可动态替换策略
封装粒度架构级别(模块解耦)算法级别(行为切换)

Pimpl(Pointer to Implementation)

class Widget {struct Impl;std::unique_ptr<Impl> pImpl;
public:Widget();~Widget();void draw();
};

优点:

  • 隐藏实现细节(API 稳定)
  • 减少头文件依赖
  • 减少编译时间

Bridge 的短板分析

  • 增加间接层次,导致理解和调试复杂性上升
  • 对小型系统或临时原型而言设计成本较高
  • 若实现接口变化频繁,也会影响稳定性

Guideline 29:桥接设计的性能权衡

虽然 Bridge 模式提升了解耦能力,但它也带来了性能成本,特别是在高频调用路径中。

性能影响分析

  • 虚函数调用开销
  • 缓存局部性降低
  • 过度抽象使得优化受限

优化手段:Partial Bridge

将不变部分内联进抽象类,仅对可变部分桥接:

class Renderer {
public:virtual void drawCircle(float radius) = 0;
};class Circle {Renderer* renderer;float radius;
public:void draw() {if (radius > 10) {// Fast path: inline draw logic} else {renderer->drawCircle(radius); // Bridge}}
};

Guideline 30:使用 Prototype 实现抽象复制

Prototype 模式是什么?

当你需要复制未知类型的对象时,不能直接使用复制构造函数或赋值。这时 Prototype 提供了解耦复制的方法。

class Animal {
public:virtual std::unique_ptr<Animal> clone() const = 0;virtual void sound() const = 0;
};class Sheep : public Animal {
public:std::unique_ptr<Animal> clone() const override {return std::make_unique<Sheep>(*this);}void sound() const override {std::cout << "Baaa\n";}
};

与 std::variant 的对比

模式Prototypestd::variant
类型行为基于继承和 clone静态多态(编译时分发)
动态性高(运行时识别)低(编译期已知)
类型安全差(需手动类型管理)高(类型封装安全)

Prototype 缺点分析

  • 所有子类需实现 clone(),违背开闭原则
  • 容易遗漏深拷贝细节,产生 bug
  • 缺乏语言级支持,机制易错

Guideline 31:External Polymorphism(外部多态)

什么是 External Polymorphism?

传统多态依赖继承与虚函数,但这要求你侵入类定义。External Polymorphism 提供了一种非侵入式运行时多态实现方式。

示例:绘图对象的非侵入式调用

struct Circle {void draw() const {std::cout << "Draw Circle\n";}
};struct Square {void draw() const {std::cout << "Draw Square\n";}
};class Shape {struct Concept {virtual void draw() const = 0;virtual std::unique_ptr<Concept> clone() const = 0;virtual ~Concept() = default;};template<typename T>struct Model : Concept {T data;Model(const T& d) : data(d) {}void draw() const override { data.draw(); }std::unique_ptr<Concept> clone() const override {return std::make_unique<Model<T>>(*this);}};std::unique_ptr<Concept> self;
public:template<typename T>Shape(T obj) : self(std::make_unique<Model<T>>(obj)) {}void draw() const { self->draw(); }
};

特性分析

  • 不依赖虚函数或继承结构
  • 支持任意用户类型,接口透明
  • 可实现“按值”传递的运行时多态

与 Adapter 模式对比

特性External PolymorphismAdapter
对象结构无需继承或接口通常需目标接口/抽象类
灵活性高(支持任意类型)适用于已知接口转换
封装方式封装在中间结构体(Model)中封装在 Adapter 类中

缺点分析

  • 实现繁琐(需要手动写 Concept/Model)
  • 性能开销相较虚函数更大
  • 对于移动语义支持较难实现完全泛化

总结对比

模式核心作用优点缺点
Bridge抽象接口与实现分离架构解耦、支持独立演化抽象复杂、增加间接层级
Prototype抽象复制机制支持克隆任意派生对象需手动实现 clone,易出错
External Polym.非侵入运行时多态高灵活性、非侵入性类型擦除实现复杂,运行效率稍低

结语

Bridge、Prototype 和 External Polymorphism——分别应对模块解耦、对象复制和多态封装问题,是构建高可维护性、高可扩展性系统架构的有效手段。理解并掌握这些模式,不仅能提升你的 C++ 设计能力,也能让你更好地驾驭大型系统演化的复杂性。

http://www.dtcms.com/wzjs/791682.html

相关文章:

  • 公司建网站多少钱一年做任务网站
  • 东高端莞商城网站建设深圳华强北招聘网
  • 成都动力无限科技有限公司做网站网站开发使用哪种语言
  • 网站推广效果不好原因是wordpress虚拟主机加速
  • 茶叶网站源码php企业宣传方案模板
  • 用六类网站做电话可以吗自己电脑做网站必须装jdk
  • 如何韩国视频网站模板下载 迅雷下载请问如何做网站
  • 免费的ai绘图网站有哪些网站的专业
  • 个人网站备案 法律说明有没有免费注册域名的网站
  • 购买网站需要注意什么营销传播方式有哪些
  • 商洛网站建设公司广州市品牌网站建设企业
  • 天水市建设路第二小学网站无锡网站怎么做
  • 网站建设与维护的不足建设网站主题
  • 做平面的素材网站用外服务器做网站
  • 设计素材网站有哪些免费网站容量空间一般要多大
  • 一个网站一级栏目招标代理公司注册
  • 旅游网站建设规划报告怎么写58同城做公司网站怎修改
  • 太原市网站制作wordpress 增加中文
  • 智能建站是什么网站的全栈建设
  • 山东省住房城乡建设部网站首页网站建设网站制作价格
  • 中山网站搜索引擎优化浏览有关小城镇建设的网站6
  • 创新的手机网站建设知乎推广和引流技巧
  • pc网站手机网站网站后台是做什么的
  • 简述织梦网站上传及安梅州正在建设高铁线路
  • 怎么用PS做珠宝网站秦皇岛网站开发
  • 福田网站建设标准数据软件工程学费
  • 一个简易网站怎么做室内装修设计说明
  • 查询域名的网站培训心得
  • 网站建设人力调配范文竞价单页网站策划设计制作
  • 承德建设网站公司济南网站建设(选聚搜网络)