`
coolerbaosi
  • 浏览: 725225 次
文章分类
社区版块
存档分类
最新评论

中介者模式 Mediator Pattern

 
阅读更多
一、什么是中介者模式
Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。


二、中介者模式的结构



三、中介者模式的角色和职责

mediator

中介者类的抽象父类。

concreteMediator

具体的中介者类。

colleague

关联类的抽象父类。

concreteColleague

具体的关联类。

四、中介者模式的优点
1. 将系统按功能分割成更小的对象,符合类的最小设计原则
2. 对关联对象的集中控制
3. 减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4. 有利于提高类的重用性

未运用中介模式前的实现:

Person.java
package com.ibeifeng.ex1; 

public abstract class Person { 
    private String name; 
    private int condition; 
 
    public Person(String name, int condition) { 
        this.name = name; 
        this.condition = condition; 
    } 
 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getCondition() { 
        return condition; 
    } 
 
    public void setCondition(int condition) { 
        this.condition = condition; 
    } 
 
    public abstract void getPartner(Person person); 
 
}
Man.java
package com.ibeifeng.ex1; 

public class Man extends Person { 
 
    public Man(String name, int condition) { 
        super(name, condition); 
    } 
 
    public void getPartner(Person person) { 
        if(person instanceof Man) { 
            System.out.println("汗,我不是同性恋!"); 
        } else { 
            if(this.getCondition() == person.getCondition()) { 
                System.out.println(this.getName() + "和" + person.getName() + "绝配"); 
            } else { 
                System.out.println(this.getName() + "和" + person.getName() + "不相配"); 
            } 
        } 
    } 
 
}
Woman.java
package com.ibeifeng.ex1; 

public class Woman extends Person { 
 
    public Woman(String name, int condition) { 
        super(name, condition); 
    } 
 
    public void getPartner(Person person) { 
        if(person instanceof Woman) { 
            System.out.println("汗,我不是同性恋!"); 
        } else { 
            if(this.getCondition() == person.getCondition()) { 
                System.out.println(this.getName() + "和" + person.getName() + "绝配"); 
            } else { 
                System.out.println(this.getName() + "和" + person.getName() + "不相配"); 
            } 
        } 
    } 
 
}
MainClass.java
package com.ibeifeng.ex1; 

public class MainClass { 
    public static void main(String[] args) { 
        Person zhangsan = new Man("张三",5); 
        Person lisi = new Man("李四",6); 
 
        Person xiaofang = new Woman("小芳", 6); 
 
        zhangsan.getPartner(xiaofang); 
        lisi.getPartner(xiaofang); 
        zhangsan.getPartner(lisi); 
 
    } 
}

运用了中介模式的代码:

Person.java
package com.ibeifeng.ex2; 

public abstract class Person { 
    private String name; 
    private int condition; 
    private Mediator mediator; 
 
 
    public Person(String name, int condition, Mediator mediator) { 
        super(); 
        this.name = name; 
        this.condition = condition; 
        this.mediator = mediator; 
    } 
 
    public Mediator getMediator() { 
        return mediator; 
    } 
 
    public void setMediator(Mediator mediator) { 
        this.mediator = mediator; 
    } 
 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getCondition() { 
        return condition; 
    } 
 
    public void setCondition(int condition) { 
        this.condition = condition; 
    } 
 
    public abstract void getPartner(Person person); 
 
}
Mediator.java
package com.ibeifeng.ex2; 

public class Mediator { 
    private Man man; 
    private Woman woman; 
 
    public void setMan(Man man) { 
        this.man = man; 
    } 
    public void setWoman(Woman woman) { 
        this.woman = woman; 
    } 
 
    public void getPartner(Person person) { 
        //将搭档设置上 
        if(person instanceof Man) { 
            this.setMan((Man)person); 
        } else { 
            this.setWoman((Woman)person); 
        } 
        //判断条件 
        if(man == null || woman == null) { 
            System.out.println("汗,我不是同性恋!"); 
        } else { 
 
            if(man.getCondition() == woman.getCondition()) { 
                System.out.println(man.getName() + "和" + woman.getName() + "绝配"); 
            } else { 
                System.out.println(man.getName() + "和" + woman.getName() + "不相配"); 
            } 
        } 
    } 
 
}
Man.java
package com.ibeifeng.ex2; 

public class Man extends Person { 
 
    public Man(String name, int condition,Mediator mediator) { 
        super(name, condition, mediator); 
    } 
 
    public void getPartner(Person person) { 
        this.getMediator().setMan(this); 
        this.getMediator().getPartner(person); 
    } 
}
Woman.java
package com.ibeifeng.ex2; 

public class Woman extends Person { 
 
    public Woman(String name, int condition,Mediator mediator) { 
        super(name, condition, mediator); 
    } 
 
    public void getPartner(Person person) { 
        this.getMediator().setWoman(this); 
        this.getMediator().getPartner(person); 
    } 
 
}
MainClass.java
package com.ibeifeng.ex2; 
public class MainClass { 
    public static void main(String[] args) { 
        Mediator mediator = new Mediator(); 
        Person zhangsan = new Man("张三",7,mediator); 
        Person lisi = new Man("李四",7,mediator); 
        Person xiaofang = new Woman("小芳",7,mediator); 
 
        zhangsan.getPartner(lisi); 
 
        xiaofang.getPartner(lisi); 
    } 
}



分享到:
评论

相关推荐

    设计模式之中介者模式(Mediator Pattern)

    用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    PHP设计模式之中介者模式(Mediator Pattern)入门与应用案例详解

    本文实例讲述了PHP设计模式之中介者模式(Mediator Pattern)。分享给大家供大家参考,具体如下: 咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不...

    Java设计模式之中介者模式(Mediator Pattern)简介

    主要介绍了Java设计模式之中介者模式(Mediator Pattern),需要的朋友可以参考下

    C#版 24种设计模式

    提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式(Mediator Pattern) 装饰模式...

    用Java实现23种设计模式

    中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式...

    C#设计模式_设计模式_C#_

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式PPT

     中介者模式(Mediator Pattern)  备忘录模式(Memento Pattern)  观察者模式(Observer Pattern)  状态模式(State Pattern)  策略模式(Strategy Pattern)  模板方法模式(Template Method ...

    php设计模式 Mediator (中介者模式)

    php /** * 中介者模式 * * 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ abstract class Mediator { abstract public function send($...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

    C#设计模式(23种设计模式)

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    33种JAVA设计模式DEMO

    中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template ...

    设计模式代码——c#

    18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    36种最新设计模式整理

    36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...

    32种设计模式

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23...

    23种设计模式 (创建型,结构型,行为型)

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) ...pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式

    design-pattern-java.pdf

    遍历聚合对象中的元素——迭代器模式(四) 遍历聚合对象中的元素——迭代器模式(五) 遍历聚合对象中的元素——迭代器模式(六) 中介者模式-Mediator Pattern 协调多个对象之间的交互——中介者模式(一) 协调多...

    设计模式 design pattern

    5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为...

Global site tag (gtag.js) - Google Analytics