设计模式之 Mediator(中介者)通俗理解
23种设计模式
1 Mediator 定义
用一个中介对象来封装一系列关于对象交互行为。
2 为何使用 Mediator?
刚刚参力口工作想租房,可以找“房屋中介”;或者,自己刚刚到一个陌生城市找工作,可以找“人才交流中心”寻找机会。
在软件的开发过程中,这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用 Mediator 模式,可以使各个对象间的耦合松散,只需关心和 Mediator 的关系,使多对多的关系变成了一对多的关系,可以降
低系统的复杂性,提高可修改扩展性。
3 如何使用?
举例 午饭后,吉永老师来组织大家玩交换水果的游戏。
package xx.study.design.mediator;/*** 小朋友交换水果*/
public class MediatorDemo {public static void main(String[] args) {Mediator mediator1 = new Mediator() ;Mediator mediator2 = new Mediator() ;Mediator mediator3 = new Mediator() ;Mediator mediator4 = new Mediator() ;Mediator mediator5 = new Mediator() ;Mediator mediator6 = new Mediator() ;mediator1.put( Fruits.APPLE ) ;mediator2.put( Fruits.BANANA ) ;mediator3.put( Fruits.GRAPE ) ;mediator4.put( Fruits.ORANGE ) ;mediator5.put( Fruits.PEACH ) ;mediator6.put( Fruits.PEAR ) ;System.out.println( "小新拿到了-->" + mediator1.get() );System.out.println( "风间拿到了-->" + mediator2.get() );System.out.println( "阿呆我拿到了-->" + mediator3.get() );System.out.println( "妮妮我拿到了-->" +mediator4.get() );System.out.println( "正男拿到了-->" +mediator5.get() );System.out.println( "佐佐木拿到了-->" +mediator6.get() );}}
package xx.study.design.mediator;import java.util.List;
import java.util.Vector;
/*** 定义一个中介对象来封装系列对象之间的交互*/
public interface IMediator {List fruits = new Vector() ;void put(Fruits fruits) ;Fruits get() ;
}
package xx.study.design.mediator;public class Mediator implements IMediator {private Fruits fruit = null ;public Fruits get() {if(fruit == null){return null ;}Fruits f = LuckyDraw.get( fruit ) ;if(fruits.contains(f)){fruits.remove( f ) ;return f ;}return null ;}public void put(Fruits fruit) {this.fruit = fruit ;synchronized(IMediator.class ) {IMediator.fruits.add( fruit ) ;}}}
package xx.study.design.mediator;import java.util.HashMap;
import java.util.Map;public class LuckyDraw {private static Map changeFruits;/*** 设定交换规则* */static{changeFruits = new HashMap() ;changeFruits.put(Fruits.APPLE , Fruits.BANANA ) ;changeFruits.put(Fruits.BANANA , Fruits.GRAPE ) ;changeFruits.put(Fruits.GRAPE , Fruits.ORANGE ) ;changeFruits.put(Fruits.ORANGE , Fruits.PEACH ) ;changeFruits.put(Fruits.PEACH , Fruits.PEAR ) ;changeFruits.put(Fruits.PEAR , Fruits.APPLE ) ;}/*** 获取能交换到的水果* */public static Fruits get(Fruits fruit) {return changeFruits.get( fruit ) ;}}package xx.study.design.mediator;public enum Fruits {APPLE , BANANA , ORANGE , PEAR , GRAPE , PEACH
}
4 和代理模式区别?
代理是代理的对象,中介是行为被代理。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
