1700462260
采购IBM电脑:100台
1700462261
1700462262
库存数量为:200
1700462263
1700462264
––销售人员销售电脑––—
1700462265
1700462266
销售IBM电脑1台
1700462267
1700462268
库存数量为:199
1700462269
1700462270
––库房管理人员清库处理––—
1700462271
1700462272
清理存货数量为:199
1700462273
1700462274
折价销售IBM电脑199台
1700462275
1700462276
不再采购IBM电脑
1700462277
1700462278
运行结果也是我们期望的,三个不同类型的参与者完成了各自的活动。你有没有发现这三个类是彼此关联的?每个类都与其他两个类产生了关联关系。迪米特法则认为“每个类只和朋友类交流”,这个朋友类并非越多越好,朋友类越多,耦合性越大,要想修改一个就得修改一片,这不是面向对象设计所期望的,况且这还是仅三个模块的情况,属于比较简单的一个小项目。我们把进销存扩展一下,如图14-3所示。
1700462279
1700462280
1700462281
1700462282
1700462283
图14-3 扩展后的进销存示意图
1700462284
1700462285
这是一个蜘蛛网的结构,别说是编写程序了,就是给人看估计也能让一大批人昏倒!每个对象都需要和其他几个对象交流,对象越多,每个对象要交流的成本也就越大了,只是维护这些对象的交流就能让一大批程序员望而却步!从这方面来说,我们已经发现设计的缺陷了,作为一个架构师,发现缺陷就要想办法修改。
1700462286
1700462287
大家都学过网络的基本知识,网络拓扑有三种类型:总线型、环型、星型。星型网络拓扑如图14-4所示。
1700462288
1700462289
1700462290
1700462291
1700462292
图14-4 星型网络拓扑
1700462293
1700462294
在星型网络拓扑中,每个计算机通过交换机和其他计算机进行数据交换,各个计算机之间并没有直接出现交互的情况。这种结构简单,而且稳定,只要中间那个交换机不瘫痪,整个网络就不会发生大的故障。公司和网吧一般都采用星型网络。我们是不是可以把这种星型结构引入到我们的设计中呢?我们先画一个示意图,如图14-5所示。
1700462295
1700462296
1700462297
1700462298
1700462299
图14-5 修改后的进销存示意图
1700462300
1700462301
加入了一个中介者作为三个模块的交流核心,每个模块之间不再相互交流,要交流就通过中介者进行。每个模块只负责自己的业务逻辑,不属于自己的则丢给中介者来处理,简化了各模块之间的耦合关系,类图如图14-6所示。
1700462302
1700462303
1700462304
1700462305
1700462306
图14-6 修改后的进销存类图
1700462307
1700462308
建立了两个抽象类AbstractMediator和AbstractColeague,每个对象只是与中介者Mediator之间产生依赖,与其他对象之间没有直接关系,AbstractMediator的作用是实现中介者的抽象定义,定义了一个抽象方法execute,如代码清单14-5所示。
1700462309
[
上一页 ]
[ :1.70046226e+09 ]
[
下一页 ]