设计模式之:调停者模式

应用场景:

调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。

当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

http://www.cnblogs.com/java-my-life/archive/2012/06/20/2554024.html,写的很好,图不错,可以借鉴下


模拟场景:

老板闲来无事提出一个需求,增加一个小功能,boss首先会找到项目老大,老大一看,首先安排 UI射击师来画图,画图完成之后,再交给工程师1,小房,小闫。

工程师完成之后再交给 测试 ,测试成功 之后 ok


Uml :

  


代码:

//项目老大接口

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public interface ProjectManagerInterface {  
  2.     public void toNextColleague(Colleague c);  
  3. }  

projectManager 负责处理同事之间的工作。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class ProjectManager implements ProjectManagerInterface {  
  2.     private FangDeveloper fang;  
  3.     private YanDeveloper yan;  
  4.     private Tester tester;  
  5.   
  6.     @Override  
  7.     public void toNextColleague(Colleague c) {  
  8.         //ba la ba la   
  9.         //and  so on  
  10.         if(c instanceof Designer){  
  11.             fang.coding();  
  12.         }  
  13.         else if(c instanceof FangDeveloper){  
  14.             yan.coding();  
  15.         }else if(c instanceof YanDeveloper){  
  16.             tester.test();  
  17.         }else if(c instanceof Tester){  
  18.             System.err.println("可以交给boss了");  
  19.         }  
  20.           
  21.     }  
  22.       
  23.     public void doAction(){  
  24.         Designer designer = new Designer(this);  
  25.         fang = new FangDeveloper(this);  
  26.         yan = new YanDeveloper(this);  
  27.         tester = new Tester(this);  
  28.           
  29.         designer.disignerImage();  
  30.           
  31.     }  
  32.   
  33. }  
// 
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public abstract class Colleague {  
  2.   
  3.     //持有一个调停者对象  
  4.     private ProjectManagerInterface mediator;  
  5.     /** 
  6.      * 构造函数 
  7.      */  
  8.     public Colleague(ProjectManagerInterface mediator){  
  9.         this.mediator = mediator;  
  10.     }  
  11.     /** 
  12.      * 获取 项目老大 
  13.      */  
  14.     public ProjectManagerInterface getMediator() {  
  15.         return mediator;  
  16.     }  
  17.       
  18. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Designer extends Colleague{  
  2.   
  3.     public Designer(ProjectManagerInterface mediator) {  
  4.         super(mediator);  
  5.     }  
  6.   
  7.     public void disignerImage(){  
  8.         System.err.println("draw a  circle...");  
  9.         getMediator().toNextColleague(this);  
  10.     }  
  11.       
  12.       
  13. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class FangDeveloper extends Colleague{  
  2.   
  3.       
  4.     public FangDeveloper(ProjectManagerInterface mediator) {  
  5.         super(mediator);  
  6.     }  
  7.   
  8.     public void coding() {  
  9.         System.err.println("coding by xiao fang");  
  10.         getMediator().toNextColleague(this);  
  11.     }  
  12.   
  13. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class YanDeveloper extends Colleague{  
  2.   
  3.   
  4.     public YanDeveloper(ProjectManagerInterface mediator) {  
  5.         super(mediator);  
  6.     }  
  7.       
  8.     public void coding() {  
  9.         System.err.println("coding by xiao yanyan");  
  10.         getMediator().toNextColleague(this);  
  11.     }  
  12.   
  13. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Tester extends Colleague {  
  2.   
  3.     public Tester(ProjectManagerInterface mediator) {  
  4.         super(mediator);  
  5.     }  
  6.   
  7.     public void test(){  
  8.         System.err.println("test case...");  
  9.         getMediator().toNextColleague(this);  
  10.     }  
  11. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Main {  
  2.   
  3.     public static void main(String[] args) {  
  4.         ProjectManager projectManager = new ProjectManager();  
  5.         projectManager.doAction();  
  6.     }  
  7. }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. draw a  circle...  
  2. coding by xiao fang  
  3. coding by xiao yanyan  
  4. test case...  
  5. 可以交给boss了  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值