Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更多关于中介模式和面向对象设计的信息_C++_Design Patterns_Oop - Fatal编程技术网

C++ 更多关于中介模式和面向对象设计的信息

C++ 更多关于中介模式和面向对象设计的信息,c++,design-patterns,oop,C++,Design Patterns,Oop,所以,我再次提出一个与模式相关的问题。这可能过于笼统,无法回答,但我的问题是(我正在编程并应用我在学习过程中学到的概念): 我在结构中有几个结构(注意,我使用的是一般意义上的单词结构,而不是严格意义上的Cstructsense(哇,真是个绕口令)),还有相当多的复杂的相互交流。以我前面的一个问题为例,我有Unit对象、UnitStatistics对象、General对象、Army对象、Soldier对象、Battle对象,列表中还有一些以树状结构组织的对象 在进行了一点研究并四处询问之后,我决定

所以,我再次提出一个与模式相关的问题。这可能过于笼统,无法回答,但我的问题是(我正在编程并应用我在学习过程中学到的概念):

我在结构中有几个结构(注意,我使用的是一般意义上的单词结构,而不是严格意义上的C
struct
sense(哇,真是个绕口令)),还有相当多的复杂的相互交流。以我前面的一个问题为例,我有
Unit
对象、
UnitStatistics
对象、
General
对象、
Army
对象、
Soldier
对象、
Battle
对象,列表中还有一些以树状结构组织的对象

在进行了一点研究并四处询问之后,我决定使用中介模式,因为相互依赖性变得有点太多,并且类开始显得过于紧密耦合(是的,这是我刚刚学到的另一个术语,我非常高兴在某个地方不使用它)。这个模式非常有意义,它应该可以理顺我目前在项目锅里煮的一些混乱的意大利面条

但是,我想我对OO设计的了解还不够。我的问题是(最后是.PS,我希望这是有意义的):我是否应该有一个中央调解人来处理程序内的所有通信,甚至是可能的?或者我应该,比如说,每个结构类型有一个抽象中介和一个子类中介,处理一组特定类的通信,例如,每个军队有一个具体的中介,帮助军队、将军、部队等

我更倾向于第二种选择,但在面向对象设计方面我真的不是专家。所以第三个问题是,我应该读什么来更多地了解这类主题(我已经看过Head First的设计模式和GoF的书,但它们更像是一本“学习词汇”类的书,而不是一本“学习如何使用词汇”类的书,这正是我在本案例中需要的


一如既往,感谢所有帮助(包括诙谐的评论).

我无法直接回答您的问题,因为我从未使用过这种设计模式。但是,每当我遇到各种对象之间的消息传递问题时,我都会使用信号槽模式。通常我使用,但我的第二个选择是。它们都通过使用一个全局消息传递处理程序来解决问题。它们也是both类型安全在cpu周期和生产率方面都非常有效。因为它们非常灵活,即任何对象都可以发出任何类型的信号,而任何其他对象都可以接收任何信号,我想,你最终会解决你所描述的问题


很抱歉,如果我没有选择这两个选项中的任何一个,而是添加了第三个选项,那么情况就更糟了!

我认为您没有提供足够的信息来做出明智的决定,哪一个是最好的

从您的其他问题来看,似乎大多数通信发生在
陆军内部的组件之间。您没有提到在一个
陆军
和另一个
之间发生的很多事情。在这种情况下,让每个
调解员
实例协调组件之间的通信似乎是有意义的组建一支单一的
陆军
——即
将军
士兵
等。因此,如果你有10支
陆军
,那么你就有10支
陆军医疗兵

如果你真的想学习O-O设计,你就必须不断地尝试,冒着出错的风险。我认为,如果不是更多的话,你也可以从重构一个没有正确建模问题的设计中学到很多东西,就像你第一次正确地设计一样。

通常情况下,您事先没有足够的信息,无法从一开始就选择正确的设计。只需选择目前适用的最简单的设计,然后在您更好地了解当前设计的要求和/或缺点后对其进行改进


关于书籍,我个人认为,如果你不太关注它们所描述的特定模式集,而更多地关注将类分解为更小的可重用组件的总体方法,GoF书籍会更有用。每个组件通常封装一个单一的功能单元。

为了使用Mediator,你需要确定氖: (1) 需要中介的对象组由什么组成? (2) 其中,哪些是具有公共接口的

中介器设计模式依赖于将被中介的对象组具有“公共接口”;即,相同的基类:GoF书籍示例中的小部件继承自相同的小部件库,等等

因此,对于您的应用程序: (1) 哪些结构(士兵、将军、军队、部队等)需要相互调解? (2) 哪些人(士兵、将军、军队、部队等)有共同的基础

作为第一步,这将帮助您确定中介设计模式中参与者的概要。您可能会发现(1)中的某些结构超出(2)的范围。然后,您可能也需要强制他们遵守公共接口,如果您可以更改,或者您有能力进行更改。。。(结果可能是太多的重新设计工作,并且违反了开放-关闭原则:您的设计应该尽可能开放以添加新功能,但不允许修改现有功能)

如果您发现(1)和(2)上面的结果是一个单独的组的分区,每个组都有自己的中介体,然后这些分区的数量决定了不同类型中介体的数量。现在,这些不同的中介体应该有自己的公共接口吗?可能有,可能没有。多态性是一种通过分组差异来处理复杂性的方法