行为型模式--Iterator模式(迭代器)对象行为型模式
用一个中介对象来封装一系列的对象交互. 中介者使各对象不需要显式地相互引用, 从而使其耦合松散, 而且可以独立地改变它们之间的交互.
一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解.
一个对象引用其他很多对象并且直接与这些对象通信, 导致难以复用该对象.
想定制一个分布在多个类中的行为,而又不想生成太多的子类(中介者对象包含这些类对象?)
图1
Mediator
—中介者定义一个接口用于与各同事(Colleague)对象通信.
ConcreteMediator(具体中介者)
—具体中介者通过协调各同事对象实现协作行为.
—了解并维护它的各个同事.
Colleague(同事类)
—每一个同事类都知道它的中介者对象.
—每一个同事对象在需与其他的同事通信的时候,与它的中介者通信..
图2
可以看到, 每一个同事对象中都一个中介者对象的引用.
同事向一个中介者对象发送和接收请求. 中介者在各同事间适当地转发请求以实现协作行为.
1. 减少了子类生成Mediator将原本分布于多个对象间的行为集中在一起. 改变这些行为只需生成Meditator的子类即可. 这样各个Colleague类可被重用(否则, 你可能需要对不同的对象交互生成一个子类来协调同事对象之间的交互)
2. 它将各Colleague解耦Mediator有利于各Colleague间的松耦合. 你可以独立的改变和复用各Colleague类和Mediator类.
3. 它简化了对象协议 用Mediator和各Colleague间的一对多的交互来代替多对多的交互. 一对多的关系更易于理解, 维护和扩展.
4. 它对对象如何协作进行了抽象将中介作为一个独立的概念并将其封装在一个对象中, 使你将注意力从对象各自本身的行为转移到它们之间的交互上来. 这有助于弄清楚一个系统中的对象是如何交互的.
5. 它使控制集中化 中介者模式将交互的复杂性变为中介者的复杂性. 因为中介者封装了协议, 它可能变得比任一个Colleague都复杂. 这可能使得中介者自身成为一个难于维护的庞然大物.
1. 该模式很好理解. 把对象的多对多交互关系变成一对多的交互关系. 例如在C++中, Class1和Class2, Class1与Class3有交互, 则此时Class1需要包含Class2和Class3的头文件, 那么它们就被耦合在一起了. 如果加多了中介者类, Class1只与中介者类联系. 只包含中介者的头文件. (这里是举例, 没有绝对, 看需求).
2. 同时, 中介者的作用不只是为了"集中头文件", 还负责了各对象的交互(这个可以区别Facade模式), Facade模式类似于统一接口, 而中介者是集中交互..
3. 每一个Colleague类中都有一个中介者对象的引用, 当需要与其他对象交互时, 则直接调用中介者对象对应的接口即可.
4. 个人理解, 不一定需要抽象Mediator类, 看需求, 也不一定需要抽象Colleague类, 还是主要看需求吧.
这样子行吗?
图3
这样子行吗?
图4
我觉得可以.
Facade与中介者的不同之处在于Facade是对一个对象子系统进行抽象, 从而提供了一个更为方便的接口. 它的协议是单向的, 即Facade对象对这个子系统类提出请求, 但反之则不行. 相反, Mediator提供了各Colleague对象不支持或不能支持的协作行为, 而且协议是多向的