17-Mediator

       Mediator模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显示地相互调用。简单而言就是封装了多个对象之间的复杂操作,使的两个对象解耦!

       http://www.jdon.com/designpatterns/mediator.htm

       http://gary0416.iteye.com/blog/913462

       以上两个连接都是不错的参考,例子比较很好理解!

Mediator模式在事件驱动类应用中比较多,例如界面设计GUI.;聊天,消息传递等,在聊天应用中,需要有一个MessageMediator,专门负责request/reponse之间任务的调节.

MVC是J2EE的一个基本模式,View Controller是一种Mediator,它是Jsp和服务器上应用程序间的Mediator.

)这些需要后续逐步验证、熟悉!


       由于没有实际的项目参与,虽然有一些例子,但是这些例子毕竟是示例,没有实际的可操作性,对于实际情况需要实际处理!



void GeneralGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { //没有按住Ctrl键时,拖动框时保存框的位置 auto isPressCtrl = event->modifiers() & Qt::Modifier::CTRL; if (this->mIsPressLeftButton && this->mMoveMementroModel && this->mMoveGrphicsItemPos && !isPressCtrl) { this->PushUnDoCmd(this->mMoveMementroModel); } this->mMoveMementroModel = nullptr; this->mIsPressLeftButton = false; this->SetGraphicsItemPosChange(false); this->mCoordinator->GetActionHandler().MouseReleaseEvent(event); QGraphicsScene::mouseReleaseEvent(event); //由于大框、中框、小框的pos不一定为0,需要都转化成基于scene(图片)原点的坐标存储, if (!this->mDrawingModel.isDrawingMode()) { if (this->mChangedItemsMap.count() > 0) { QList<QSharedPointer<GeneralGraphicsBaseModel>> updateItemsModelList; for (auto& key : this->mChangedItemsMap.keys()) { auto changedItem = this->mChangedItemsMap[key]; if (changedItem) { if (changedItem->GetModel()->regionType == GeneralGraphicsRegionType::ElementOutRegion) { for (auto& citem : changedItem->childItems()) { auto childItem = static_cast<GeneralGraphicsBaseItem *>(citem); if (childItem) { childItem->TransToSceneVertexs(); updateItemsModelList.append(childItem->GetModel()); } } } else if (changedItem->GetModel()->regionType == GeneralGraphicsRegionType::BoardRegion) { for (auto& elementOutItem : changedItem->childItems()) { for (auto& citem : elementOutItem->childItems()) { auto childItem = static_cast<GeneralGraphicsBaseItem *>(citem); if (childItem) { childItem->TransToSceneVertexs(); updateItemsModelList.append(childItem->GetModel()); } } auto eGItem = static_cast<GeneralGraphicsBaseItem *>(elementOutItem); if (eGItem) { eGItem->TransToSceneVertexs(); updateItemsModelList.append(eGItem->GetModel()); } } } changedItem->TransToSceneVertexs(); updateItemsModelList.append(changedItem->GetModel()); } } //发送更新的图元信息信号 auto mediator = this->mCoordinator->GetMediator(); if (mediator) { GG_SDK_LOG_TRACE("SigGGMediatorUpdateGraphicsItem %d", updateItemsModelList.count()); emit mediator->SigGGMediatorUpdateGraphicsItem(updateItemsModelList); } } this->mChangedItemsMap.clear(); } //发送选中的图元信息信号 auto mediator = this->mCoordinator->GetMediator(); if (mediator && this->selectedItems().count() < 10) { auto resList = GeneralGraphicsUtils::GetSelectedGraphicsItemIndexFromScene(this->selectedItems()); if (!resList.isEmpty()) { emit mediator->SigGGMediatorSelectItems(resList); } } GG_SDK_LOG_TRACE("graphics item count: %d", this->mGrpahicsItemsMap.count()); qDebug(u8"graphics item count: %d", this->mGrpahicsItemsMap.count()); }讲解一下这个代码,是做什么的逐行讲一下
10-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值