[GoF设计模式]Prototype模式和Mediator模式的C++实现

【软考设计模式总览】GoF 23 种设计模式全景图:分类、考频与备考路线图 阅读详情

【Prototype模式】

用原型实例指定创建对象的种类,被且通过拷贝这些原型对象创建新的对象。拷贝构造函数应该注意深拷贝和浅拷贝的问题。深拷贝主要是指有指针或者复合对象的情况,而浅拷贝对此只是拷贝了指针,而与其共享同一个副本。编译器提供的默认的拷贝构造函数是按位拷贝的值(Value)类型的拷贝方式。Prototype(下例中的HousePrototype)声明一个克隆自身的接口,而ConcretePrototype(下例中的ApartmentConcretePrototype)则实现一个克隆自身的操作。主调函数则利用一个原型克隆自身从而创建一个新的对象。对客户隐藏了具体的产品类。

【图解】

以住房类(HousePrototype)为例子,其中的CloneMyself函数接口是直接调用拷贝构造函数来实现其自身的克隆,所以在子类(ApartmentConcretePrototype)中的拷贝构造函数的实现是关键所在,要注意深拷贝和浅拷贝的问题,经可能避免内存泄漏。

2

 

【代码】

   

 

 

 

【输出】

 2

 

【Mediator模式】

中介者模式是利用一个中介对象来封装一些列的对象交互。中介者使得各对象不需要显示地相互引用,从而达到松耦合的目的,而且可以使得它们之间的交互可以独立地改变。主要是用于对象较多时,交互关系错综复杂,可以使用其来达到解耦的目的。中介者(Mediator)提供统一的接口用于交互双方(Colleague)之间的通信,具体的中介者(Concrete Mediator)则通过协调各同事以实现协作的行为,因此要知道并引用各同事(Colleague)。由于中介者的行为与要使用的数据与业务关系紧密,抽象的中介者提供一个方便很多对象使用的接口是不现实的,只起到标识接口的作用,往往可以省略。中介者模式很容易应用到系统中,也很容易误用,但系统出现"多对多"交互复杂的对象群时,要予以考虑,一组对象以定义良好但是复杂的方式进行通信,产生了混乱的依赖关系,也导致对象难以复用时,要考虑。[应注意与observer模式的搭配使用来反映发布者和订阅者之间的关系,如果发布者和订阅者很多,关系错综的情况下]

【图解】

以房屋买卖中介为例子,买卖双方都是具体的Concrete Colleague,而房屋的中介是具体的Concrete Mediator。卖方向关联的中介提出出售请求,中介通知关联的买房,过程也可以相反。

 

【代码】

 

【输出】

1

设计模式 Mediator 中介者 c++ 中介者模式的完整代码。 程序默认使用vs开发。其他开发工具可能需要做少许调整。 立即下载

相关推荐

【第18节】C++设计模式(行为模式)-Mediator(中介者)模式

Mediator 模式的核心思想是通过一个中介者对象来封装一组对象之间的交互。这样,对象之间不再直接通信,而是通过中介者进行间接通信。(1)Mediator(中介者):定义一个接口用于与各 Colleague 对象通信。实现 Mediator 接口,协调各 Colleague 对象之间的交互。每个 Colleague 对象都知道它的 Mediator 对象,并通过 Mediator 与其他 Colleague 对象通信。

攻城狮7号的博客 1190

C++设计模式之行为型模式:中介者模式Mediator

中介者模式是一种行为型设计模式,通过引入中介对象简化对象间的多对多交互,将其转化为一对多关系。核心思想是集中控制交互逻辑,降低对象间的直接耦合。典型应用如聊天室系统,用户通过中介者转发消息,而非直接通信。该模式优势在于降低耦合、集中控制、简化设计,适用于对象交互复杂的场景(如GUI组件、多人游戏)。但需注意中介者可能过度复杂化的问题。与观察者模式不同,中介者强调主动协调,而观察者侧重被动通知。

bkspiderx的博客 1167

C++ 设计模式——中介者模式

中介者模式Mediator Pattern)是一种行为型设计模式,它允许对象间的通信被封装到一个中介者对象中。该模式的主要目的是减少多个对象类之间的通信复杂性,通过创建一个集中的控制点来管理相互间的依赖关系。这种模式特别适用于大型系统中,可以帮助减少组件之间的直接交互,从而使其更易于维护扩展。

慢慢记录,慢慢更新。 3226

C++之中介者(Mediator)模式

0. 简介 中介者模式命令模式类似,都有着一层中间层来作为沟通的渠道,只是中介者模式使用了Mediator实现实现更新函数changed。而在命令模式中使用Invoke作为最上层,用于管理具体类的操作,从而对接收者增删。简而言之,命令模式在发送者请求者之间建立单向连接,使请求者可以调用发送者的不同方法。中介者清除了发送者请求者之间的直接连接, 强制它们通过一个中介对象进行间接沟通。 1. 中介者模式示意图 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的

lovely_yoshino的博客 4527

C++设计模式——中介者模式(Mediator Pattern)

C++设计模式——中介者模式(Mediator Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——中介者模式(Mediator Pattern)目录引言定义代码示例总结参考资料 引言 假设现在科技发达之后,家里所有设备都是智能化的,而小明在家洗澡的时候有个习惯就是喜欢听歌,而且洗澡时候还要把窗帘拉上。因此就有这种情形,小明要拉窗帘可能就是要洗澡,当然也要听歌,因此我们希望小明家的洗浴设备,音响设备窗帘设备都能协同合作,不管操作哪种设备,其他两种设备都有一定响应,以此写出程序。

leonardohaig的博客 1877

C++ 23种设计模式

c++23种设计模式

c++、UE 616

[转]笔记--设计模式精解c++GoF 23 种设计模式解析

转自:http://dxwang.blog.51cto.com/384651/1415880 引言 0.1 设计模式解析(总序)0.2 设计模式解析后记0.3 与作者联系1 创建型模式1.1 Factory模式 1)为了提高内聚(Cohesion)松耦合(Coupling) ,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。 这样我们可以通过声明一个指向基类的指针来指...

dayao3530的博客 314

笔记--设计模式精解c++GoF 23 种设计模式解析

0 引言0.1 设计模式解析(总序)0.2 设计模式解析后记0.3 与作者联系1 创建型模式1.1 Factory模式 1)为了提高内聚(Cohesion)松耦合(Coupling) ,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。 这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,...

demonzsmj12315的博客 259

侯捷-C++设计模式 笔记(已更新设计模式3个)

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。

双河子思的博客 527

Boolan C++设计模式 第二周笔记

23种设计模式 “对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。 典型模式: Factory MethodAbstract FactoryPrototypeBuilder 6. Factory Method工厂方法 模式定义 定义一个用于

Sylar2016的博客 623

【转载】 笔记--设计模式精解c++GoF 23 种设计模式解析

0 引言 0.1 设计模式解析(总序)0.2 设计模式解析后记0.3 与作者联系1 创建型模式1.1 Factory模式 1)为了提高内聚(Cohesion)松耦合(Coupling) ,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。 这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问...

weixin_30588907的博客 157

C++ 设计模式 01:设计模式一览

本文根据 GoF 英文原版 Design Patterns: Elements of Reusable Object-Oriented Software 中文版《设计模式:可复用面向对象软件的基础》 以及李建忠老师的课程 C++ 设计模式 整理 01. Abstract Factory 抽象工厂模式 提供一个接口以在不必指定具体类的条件下构建一系列相关或相互依赖的对象 02. Adapt...

InGeniX 321

【2013.1.10】设计模式C++ 实现

// // // // // // // // // ///2013.1.10 // // // // // // // // // 关于设计模式(GoF), 这是一个面向对象编程人员一个不可避免的话题。 笔者修行尚浅, 只是将其通读一遍, 并思考过一段时间, 编了一些程序来实现而已。 但我正是因为站在与大家相差不多

572

设计模式总结

发现这文章总结得不错,就转载了过来。 首先讨论一下构造型模式。 Factory Method 描述: 是最基本的构造型模式。它将构造从单纯的构造函数中分离出来。 动机: 用于封装复杂的或者是易于变化的构造操作。 适用性/作用: 适用于创建那些构造时需要初始化的对象,或者需要按一定次序构造对象的时候。该模式结构很简单,额外的代码量也很少,因此适合在开发的开始阶段就可以使用

jeromewolf的专栏 417

极客班

1.Factory Method模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。要点总结: Factory Method模式用于隔离类对象的使用者具体类型之间的耦合关系。 面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。Factory Method模式通过面向对象的手法,将所要

qq_33329583的博客 350

对象——特殊类设计

C++的特殊类设计:不能被拷贝的类、只能在堆上创建对象的类、只能在栈上创建对象的类、不能被继承的类、只能创建一个对象的类的饿汉模式懒汉模式

m0_73693552的博客 289
上一篇: [GoF设计模式]Flyweight模式和State模式的C++实现
下一篇: [GoF设计模式]Iterator模式和Singleton模式的C++实现
roynee
博客等级 码龄18年 31粉丝 55原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值