#什么是调解人模式?
中介对象用于封装一系列对象交互。中介器使得对象之间不需要显式的相互引用,使得耦合松散,它们之间的交互可以独立改变。
调解人模式,又称调解模式,属于行为设计模式,是达米特定律的典型应用。
从杂乱的网状结构到清晰的星形结构。
* * *
#调解器模式类图
中介模式类图
* * *
#调解人模式角色
抽象中介者角色(Mediator):抽象的中介角色定义了一个统一的接口和一个或多个事件方法,用于同事角色之间的通信。
具体中介者角色(ConcreteMediator):实现了抽象中介器声明的事件方法,协调了同事类之间的行为,并持有所有同事类对象的引用。
抽象同事类角色(Colleague):抽象同事类被定义并持有抽象中介对象的引用。
具体同事类角色(ConcreteColleague):继承抽象的同事类,实现自己的事业,通过中介和其他同事类交流。
* * *
#调解模式的优势
*通过对象之间的解耦,可以增加对象的可重用性。
*通过集中控制逻辑,可以简化系统维护。
*可以使对象之间传输的消息变得简单并大大减少。
*提高系统的灵活性,便于扩展和维护。
* * *
#调解模式的缺点
*中介机构承担的责任更大,一旦中介机构出现问题,整个系统都会受到影响。
*如果设计不当,中介对象本身就会变得过于复杂,难以维护和管理。
* * *
#调解员模式演示要求
使用中介模式:设置公司总经理为中介角色,公司各部门为具体同事角色,部门工作分为内部工作和外部工作。
* * *
#中介模式源代码示例
/ * 抽象中介者角色 */ public interface Mediator { void register(String name, Department department); void command(String name); }
/*具体调解员角色:总经理*/公开课校长调解员实现调解员{ private map department map=new hashmap();公共作废登记簿(字符串名称,部门部门){ departmentMap.put(名称,部门);} public void命令(字符串名称){ departmentMap.get(名称)。executeinsething();departmentMap.get(名称)。executeotydething();} }
/ * 抽象同事角色 */ public abstract class Department { // 中介者对象 protected Mediator mediator; public Department(Mediator mediator) { this.mediator = mediator; } /*处理部门内部事务*/公开摘要作废执行内部事();/ * 处理部门外的事务 */ public abstract void executeOutsideThing(); }
/*具体同事角色:研发;d部门类*/公共类开发部门扩展部门{公共开发部门(调解员med
iator) { super(mediator); mediator.register("研发部",this); } @Override public void executeOutsideThing() { System.out.println("研发部:汇报工作!资源不够,需要找人!"); mediator.command("财务部"); } @Override public void executeInsideThing() { System.out.println("研发部:专心科研,研发项目!"); } }
/ * 具体同事角色:财务部类 */ public class FinancialDepartment extends Department { public FinancialDepartment(Mediator mediator) { super(mediator); mediator.register("财务部",this); } @Override public void executeInsideThing() { System.out.println("财务部内部事务:1.收账款;2.算利润;3.发奖金"); } @Override public void executeOutsideThing() { System.out.println("财务部外部事务:提请总经理审批,搞投资理财,钱生钱。"); } }
/
/ * @ClassName PersonnelDepartment * @Description: 具体同事角色:人事部门类 * @Author ford * @Date 2021/6/4 * @Version V1.0 / public class PersonnelDepartment extends Department { public PersonnelDepartment(Mediator mediator) { super(mediator); mediator.register("人事部",this); } @Override public void executeInsideThing() { System.out.println("人事部内部事务:1.招聘人才 2.组织公司活动"); } @Override public void executeOutsideThing() { System.out.println("人事部外部事务:向总经理申请活动经费."); mediator.command("财务部"); } }
* * *
# 中介者模式客户端测试
/ * 中介者模式客戶端测试类 */ public class Client { public static void main(String[] args) { PresidentMediator president = new PresidentMediator(); DevelopmentDepartment development = new DevelopmentDepartment(president); FinancialDepartment financial = new FinancialDepartment(president); MarketDepartment market = new MarketDepartment(president); PersonnelDepartment personnel = new PersonnelDepartment(president); // 研发部 development.executeInsideThing(); development.executeOutsideThing(); System.out.println("========================================================="); // 财务部 financial.executeInsideThing(); financial.executeOutsideThing(); System.out.println("========================================================="); // 市场部 market.executeInsideThing(); market.executeOutsideThing(); System.out.println("========================================================="); // 行政部 personnel.executeInsideThing(); personnel.executeOutsideThing(); } }
研发部:专心科研,研发项目!研发部:汇报工作!资源不够,需要找人!财务部内部事务:1.收账款;2.算利润;3.发奖金财务部外部事务:提请总经理审批,搞投资理财,钱生钱。=========================================================财务部内部事务:1.收账款;2.算利润;3.发奖金财务部外部事务:提请总经理审批,搞投资理财,钱生钱。=========================================================市场部:制定工作计划!挖掘潜在客户!市场部:1.找客户! 2.申请资金,投广告!财务部内部事务:1.收账款;2.算利润;3.发奖金财务部外部事务:提请总经理审批,搞投资理财,钱生钱。=========================================================人事部内部事务:1.招聘人才 2.组织公司活动人事部外部事务:向总经理申请活动经费.财务部内部事务:1.收账款;2.算利润;3.发奖金财务部外部事务:提请总经理审批,搞投资理财,钱生钱。Process finished with exit code 0
* * *
# 小结
本章分享了中介者模式,主要介绍了中介者模式的定义、类图、角色及优缺点,并以公司组织架构需求为例进行代码实现。
若本文使你受益,还请给予关注、点赞、转发,欢迎拍砖!!!