package com.cheng.zenofdesignpatterns.patterns.mediator; import android.view.View; import com.cheng.zenofdesignpatterns.ZoDPChapterBaseActivity; import com.cheng.zenofdesignpatterns.patterns.mediator.common.ConcreteColleague1; import com.cheng.zenofdesignpatterns.patterns.mediator.common.ConcreteColleague2; import com.cheng.zenofdesignpatterns.patterns.mediator.common.ConcreteMediator; import com.cheng.zenofdesignpatterns.patterns.mediator.common.Mediator; import com.cheng.zenofdesignpatterns.patterns.mediator.invoicing.AbstractMediator; import com.cheng.zenofdesignpatterns.patterns.mediator.invoicing.InvoicingMediator; import com.cheng.zenofdesignpatterns.patterns.mediator.invoicing.Purchase; import com.cheng.zenofdesignpatterns.patterns.mediator.invoicing.Sale; import com.cheng.zenofdesignpatterns.patterns.mediator.invoicing.Stock; public class ZoDPMediatorActivity extends ZoDPChapterBaseActivity { @Override protected void initData() { mTitleTV.setText("中介者模式"); String content = "定义:\n" + "Define an object that encapsulates how a set of objects interact.InvoicingMediator " + "promotes loose coupling by keeping objects from referring to each other " + "explicitly,and it lets you vary their interaction independently.\n" + "用一个中介者对象封装一系列的对象交互,中介者使各个对象不需要显式地相互作用,从而" + "使其耦合松散,而且可以独立地改变它们之间的交互。\n\n" + "中介者模式的优点\n" + "减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了" + "依赖,当然同时也降低了类间的耦合。\n" + "中介者模式的缺点\n" + "中介者会膨胀得很大,而且逻辑复杂,原本N个对象直接的相互依赖关系转换为中介者和同事类" + "的依赖关系,同事类越多,中介者的逻辑就越复杂。\n\n" + "使用场景\n" + "中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状" + "结构。在这种情况下一定要考虑使用中介者模式,这有利于把蜘蛛网梳理为星型结构,使原本复" + "杂混乱的关系变得清晰简单。\n\n" + "实际应用\n" + "- 机场调度中心\n" + "- MVC框架中的C就是一个中介者\n" + "- 媒体网关\n" + "- 中介服务\n\n" + "最佳实践\n" + "在如下的情况下可以尝试使用中介者模式:\n" + "- N个对象之间产生了相互的依赖关系(N > 2)\n" + "- 多个对象有依赖关系,但是依赖的行为尚不确定或者有发生改变的可能,在这种情况下一般建议" + "采用中介者模式,降低变更引起的风险扩散\n" + "- 产品开发。把中介者模式应用到产品中,可以提升产品的性能和扩展性"; mContentTV.setText(content); } @Override public void onClick(View v) { // 1. 模拟进销存 AbstractMediator mediator = new InvoicingMediator(); // 采购人员采购电脑 System.out.println("------采购人员采购电脑--------"); Purchase purchase = new Purchase(mediator); purchase.buyIBMcomputer(100); // 销售人员销售电脑 System.out.println("\n------销售人员销售电脑--------"); Sale sale = new Sale(mediator); sale.sellIBMComputer(1); // 库房管理人员管理库存 System.out.println("\n------库房管理人员清库处理--------"); Stock stock = new Stock(mediator); stock.clearStock(); // 2. 通用中介者演示 Mediator mediator1 = new ConcreteMediator(); ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator1); ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator1); colleague1.depMethod1(); colleague2.depMethod2(); } }