如何运用结构型设计模式实现基础代理模式?

2026-05-07 18:420阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1257个文字,预计阅读时间需要6分钟。

如何运用结构型设计模式实现基础代理模式?

直接复制真实对象会导致代理破坏代理语法——你的代理是那个对象,而不是它的副本。当真实对象有状态或资源(如文件句柄、网络连接)时,赋值操作会导致状态或资源丢失。这时,值传递会导致行为错误或资源重复释放。

实操建议:

  • std::unique_ptr<RealSubject>RealSubject* 持有(推荐前者,明确所有权)
  • 若需共享生命周期,用 std::shared_ptr<RealSubject>,但要警惕循环引用
  • 避免裸指针 + 手动 new/delete —— 容易漏删、重复删,引发 double free 或悬空指针
  • 构造代理时传入已存在的真实对象实例,不要在代理内部自行构造(除非是虚拟代理场景)

虚函数表和继承关系决定能否拦截调用

代理模式依赖多态:用户通过基类接口操作代理,代理再转发给真实对象。如果 RealSubject 没有从公共抽象基类(比如 Subject)继承,或关键方法没声明为 virtual,代理就无法统一接口,也就谈不上“透明代理”。

阅读全文
标签:C

本文共计1257个文字,预计阅读时间需要6分钟。

如何运用结构型设计模式实现基础代理模式?

直接复制真实对象会导致代理破坏代理语法——你的代理是那个对象,而不是它的副本。当真实对象有状态或资源(如文件句柄、网络连接)时,赋值操作会导致状态或资源丢失。这时,值传递会导致行为错误或资源重复释放。

实操建议:

  • std::unique_ptr<RealSubject>RealSubject* 持有(推荐前者,明确所有权)
  • 若需共享生命周期,用 std::shared_ptr<RealSubject>,但要警惕循环引用
  • 避免裸指针 + 手动 new/delete —— 容易漏删、重复删,引发 double free 或悬空指针
  • 构造代理时传入已存在的真实对象实例,不要在代理内部自行构造(除非是虚拟代理场景)

虚函数表和继承关系决定能否拦截调用

代理模式依赖多态:用户通过基类接口操作代理,代理再转发给真实对象。如果 RealSubject 没有从公共抽象基类(比如 Subject)继承,或关键方法没声明为 virtual,代理就无法统一接口,也就谈不上“透明代理”。

阅读全文
标签:C