1.系统结构复杂且耦合度高:
每一个界面组件与多个其他组件之间产生
相互关联和调用,
若一个界面组件对象发生变化,
需要跟踪与之有关联的其他所有组件并进行处理,
系统组件之间呈现一种较为复杂的网状结构,
组件之间的耦合度高。
2.组件的可重用性差:由于每一个组件和其他组件之间
都具有很强的关联,若没有其他组件的支持,
一个组件很难被另一个系统或模块重用,
这些组件表现出来更像一个不可分割的整体,
而在实际使用时,我们往往需要每一个组件都能够
单独重用,而不是重用一个由多个组件组成的复杂
结构。
3.系统的可扩展性差:如果在上述系统中增加一个新的
组件类,则必须修改与之交互的其他组件类的源代码,
将导致多个类的源代码需要修改,
同样,如果要删除一个组件也存在类似的问题,
这违反了"开闭原则",可扩展性和灵活性欠佳。
"迪米特法则",引入一个“第三者”来降低现有系统中类
之间的耦合度。由这个“第三者”
来封装并协调原有组件两两之间复杂的引用关系,
使之成为一个松耦合的系统,
中介者模式:用一个中介对象
来封装一系列的对象交互,
中介者使各对象不需要显式地相互引用,
从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介模式又称为调停者模式,它是一种对象行为型模式。
中介者模式的主要优点如下:
1.中介者模式简化了对象之间的交互,
它用中介者和同事的一对多交互代替了原来
同事之间的多对多交互,一对多关系更容易理解、
维护、和扩展,将原本难以理解的网状结构转换程相对
简单的星型结构。
2.中介模式可将各同事对象解耦。
中介者有利于各同事之间的送耦合,
3.可以减少子类生成,中介者将原本分布于多个对象
间的行为集中在一起,改变这些行为只需生成新的
中介者子类即可,这使各个同事类可被重用,无须
对同事类进行扩展。
主要缺点:
中介者模式的主要缺点如下:
在具体中介者类中包含了大量同事之间的交互细节,
可能会导致具体中介类非常复杂,使得系统难以维护。
适用场景
1.系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
2.一个对象由于引用了其他很多对象并且直接和这些对象通讯,
? 导致难以复用该对象。
3.想通过一个中间类封装多个类中的行为,而又不想生成太多的子类。
? 可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,
? 如果需要改变行为则可以增加新的具体中介者类。
??