JAVA开发的23种设计模式之 --- 中介者模式
2017-08-30 13:43
405 查看
中介者模式
概述 : 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
中介者模式所包含的角色
Mediator : 中介者角色.在里面定义各个部门之间的交互对象,
ConcreteMediator :
具体中介者实现角色.维护各个部门之间的交互关系
Deparement :
部门角色.所有具体部门类的父类.
ConreteDepaerment :
具体部门角色.实现与中介者角色的交互.从而实现与其他部门的交互
使用场景
系统中对象之间存在比较复杂的引用关系,导致他们之间的依赖关系结构混乱而已难以复用
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类
优点
降低了类的复杂度,将一对多的关系转化成了一对一(具体部门角色对中介者)
各个类之间实现解耦
符合迪米特原则
缺点
如果部门很多的话,中介类会非常庞大,难以维护
代码实现
示例:一个公司,各个部门之间可能需要经常交互,这样非常的错综复杂.现在使用中介者模式来简单实现产品部门和研发部门的交互.现在产品部门通常要时刻了解研发部门的开发进度,所以两个部门需要经常进行联系.
抽象中介者角色
我将23种设计模式的代码上传到CSDN,有用得到的同学 可以去下载.
下载地址 : 点我
概述 : 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
中介者模式所包含的角色
Mediator : 中介者角色.在里面定义各个部门之间的交互对象,
ConcreteMediator :
具体中介者实现角色.维护各个部门之间的交互关系
Deparement :
部门角色.所有具体部门类的父类.
ConreteDepaerment :
具体部门角色.实现与中介者角色的交互.从而实现与其他部门的交互
使用场景
系统中对象之间存在比较复杂的引用关系,导致他们之间的依赖关系结构混乱而已难以复用
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类
优点
降低了类的复杂度,将一对多的关系转化成了一对一(具体部门角色对中介者)
各个类之间实现解耦
符合迪米特原则
缺点
如果部门很多的话,中介类会非常庞大,难以维护
代码实现
示例:一个公司,各个部门之间可能需要经常交互,这样非常的错综复杂.现在使用中介者模式来简单实现产品部门和研发部门的交互.现在产品部门通常要时刻了解研发部门的开发进度,所以两个部门需要经常进行联系.
抽象中介者角色
package Mediator; /** * Created by looper on 2017/8/28. */ public abstract class Mediator { public abstract void contact(Department department,String message); }具体中介者角色
package Mediator; /** * Created by looper on 2017/8/28. */ public class ConcreteMediator extends Mediator { protected ResearchDepartment researchDepartment; protected ProductDepartment productDepartment; public ResearchDepartment getResearchDepartment() { return researchDepartment; } public void setResearchDepartment(ResearchDepartment researchDepartment) { this.researchDepartment = researchDepartment; } public ProductDepartment getProductDepartment() { return productDepartment; } public void setProductDepartment(ProductDepartment productDepartment) { this.productDepartment = productDepartment; } @Override public void contact(Department department, String message) { if ("研发部".equals(department.getName())) { productDepartment.getMessage(message); } else if ("产品部".equals(department.getName())) { researchDepartment.getMessage(message); } } }部门角色类
package Mediator; /** * Created by looper on 2017/8/28. */ public abstract class Department { private String name; protected Mediator mediator; public Department(String name, Mediator mediator){ this.name = name; this.mediator = mediator; } public String getName() { return name; } public void setName(String name) { this.name = name; } //接收其他部门的消息 public abstract void getMessage(String message); }具体部门角色1(产品部)
package Mediator; /** * Created by looper on 2017/8/28. */ public class ProductDepartment extends Department { public ProductDepartment(String name, Mediator mediator) { super(name, mediator); } //接收其他部门的消息 @Override public void getMessage(String message) { System.out.println("产品部刚刚收到消息 : "+message); } //向其他部门发送信息 public void sendMessage(ProductDepartment productDepartment,String message) { mediator.contact(productDepartment,message); } }具体部门角色2(研发部)
package Mediator; /** * Created by looper on 2017/8/28. */ public class ResearchDepartment extends Department { public ResearchDepartment(String name, Mediator mediator) { super(name, mediator); } //接受其他部门的消息 @Override public void getMessage(String message) { System.out.println("研发部刚刚收到消息 : "+message); } //向其他部门发送消息 public void sendMessage(ResearchDepartment researchDepartment, String message) { mediator.contact(researchDepartment,message); } }测试类
package Mediator; /** * Created by looper on 2017/8/28. */ public class MediatorTest { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ProductDepartment productDepartment = new ProductDepartment("产品部",mediator); ResearchDepartment researchDepartment = new ResearchDepartment("研发部",mediator); mediator.setProductDepartment(productDepartment); mediator.setResearchDepartment(researchDepartment); productDepartment.sendMessage(productDepartment,"我是产品部,需要研发部提供具体的开发日程"); researchDepartment.sendMessage(researchDepartment,"我的研发部,最新的开发日程已经发送到你们,请注意查收"); } }
我将23种设计模式的代码上传到CSDN,有用得到的同学 可以去下载.
下载地址 : 点我
相关文章推荐
- Java开发中的23种设计模式详解----中介者模式(Mediator)
- Java开发中的23种设计模式之二十二:中介者模式(Mediator)
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式
- 深入浅出Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式之一:工厂方法模式(Factory Method)
- Java开发中常见的23种设计模式概述
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解