大话设计模式之中介者模式
Posted chenpt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式之中介者模式相关的知识,希望对你有一定的参考价值。
中介者模式
用一个中介对象来封装一系列对象的交互。中介者使各个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
涉及到的角色描述
- Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口。
- ConcreteMediator:具体中介者角色,它从具体的同事对象接收消息,向具体同事发出命令。
- Colleague:抽象同事角色,定义了中介者对象接口,它只知道中介者而不知道其他同事对象。
- ConcreteColleague:具体同事角色,每个具体同事类都知道自己在小范围内的行为,而不知道它在大范围内的目的。
优点
1、降低了类的复杂度,将一对多转化成了一对一。
2、各个类之间的解耦。
3、符合迪米特原则。
缺点
中介者会庞大,变得复杂难以维护。
使用场景
1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
具体代码实现
先定义抽象中介Mediator
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: 中介者接口 * @Date: created in 2018/8/28 * @Modified By: */ public interface UniteNations { void declare(String message,Country country); }
抽象同事类Colleague
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: 抽象国家类持有一个中介者对象 * @Date: created in 2018/8/28 * @Modified By: */ public abstract class Country { UniteNations uniteNations; Country(UniteNations uniteNations){ this.uniteNations = uniteNations; } }
具体同事1ConcreteColleague1
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: * @Date: created in 2018/8/28 * @Modified By: */ public class USA extends Country { USA(UniteNations uniteNations) { super(uniteNations); } public void declare(String message){ uniteNations.declare(message,this); } public void getMessage(String message){ System.out.println("美国获得对方消息:"+message); } }
具体同事1ConcreteColleague2
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: * @Date: created in 2018/8/28 * @Modified By: */ public class Iraq extends Country { Iraq(UniteNations uniteNations) { super(uniteNations); } public void declare(String message){ uniteNations.declare(message,this); } public void getMessage(String message){ System.out.println("伊拉克获得对方消息:"+message); } }
具体中介者
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: 具体中介者 * @Date: created in 2018/8/28 * @Modified By: */ public class UniteNationsSecurity implements UniteNations { private USA usa; private Iraq iraq; public void setUSA(USA usa){ this.usa=usa; } public void setIraq(Iraq iraq){ this.iraq=iraq; } @Override public void declare(String message, Country country) { if(country==usa){ iraq.getMessage(message); }else if(country==iraq){ usa.getMessage(message); } } }
客户端
package com.chenpt.designModel.mediatorModel; /** * @Author: chen * @Description: * @Date: created in 2018/8/28 * @Modified By: */ public class MainTest { public static void main(String[] as){ UniteNationsSecurity security = new UniteNationsSecurity(); USA usa = new USA(security); Iraq iraq = new Iraq(security); security.setUSA(usa); security.setIraq(iraq); usa.declare("不准研制核武器,否则发动战争"); iraq.declare("我们没有核武器,也不怕侵略"); } } //执行结果 伊拉克获得对方消息:不准研制核武器,否则发动战争 美国获得对方消息:我们没有核武器,也不怕侵略
以上是关于大话设计模式之中介者模式的主要内容,如果未能解决你的问题,请参考以下文章