现在的位置: 首页 > 综合 > 正文

设计模式—-Mediator(中介者)模式

2013年08月12日 ⁄ 综合 ⁄ 共 3856字 ⁄ 字号 评论关闭
设计模式----Mediator(中介者)模式
 
GoF用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
 
OOD鼓励奖行为封装到各个对象中,也就是将变化点封装。但是有时候这种封装可能会导致对象间有许多连接。极端情况下,每个对象都知道其他所有对象。各个对象之间的交互比较多,每个对象的行为操作都依赖其他对象。修改一个对象的行为,很可能同时涉及到修改很多其他对象的行为。那么这时,可以使用Mediator模式将集体行为封装在一个“中介者”对象中以避免这个问题。使用Mediator模式可以使各个对象间的耦合松散,只要关心每个对象和Mediator的关系,这样使多对多的关系变成了一对多的关系,每个对象都和Mediator联系。降低了系统得复杂性,提高了可扩展性和可修改性。
 
下面是实例代码:

 

package Mediator;

public abstract class Mediator
{
    
public abstract void register(Colleague c, String type);
    
public abstract void changed(String type);
}
//end class Mediator

package Mediator;

public class ConcreteMediator extends Mediator
{
    
private ColleagueA a;
    
private ColleagueB b;
    
private ColleagueC c;

    
public ConcreteMediator()
    
{
        
//do something....
    }
//end ConcreteMediator()
    
    
public void register(Colleague colleague, String str)
    
{
        
if(str.equals("A")) {
                a 
= (ColleagueA)colleague;
        }
 else if (str.equals("B")) {
                b 
= (ColleagueB)colleague;
        }
 else if (str.equals("C")) {
                c 
= (ColleagueC)colleague;
        }

    }
//end register(...)
    
    
public void changed(String type)
    
{
        
if(type.equals("A")) {
                b.action();
                c.action();
        }
 else if (type.equals("B")) {
                a.action();
                c.action();
        }
 else if (type.equals("C")) {
                a.action();
                b.action();
        }

    }
//end change(...)
    
}
//end class changed(...)

package Mediator;

public abstract class Colleague
{
    
public abstract void change();
    
public abstract void action();
}
//end class Colleague

package Mediator;

public class ColleagueA extends Colleague
{
    
private final String type = "A";
    
private Mediator med;
    
    
public ColleagueA(Mediator m)
    
{
        med 
= m;
        med.register(
this, type);
    }
//end ColleagueA(...)
    
    
public void change()
    
{
        System.out.println(
"---------- A changed now ! ----------");
        med.changed(type);
    }
//end change()
    
    
public void action()
    
{
        System.out.println(
"  A is changed by mediator ");
    }
//end action()
    
}
//end class Colleague

package Mediator;

public class ColleagueB extends Colleague
{
    
private final String type = "B";
    
private Mediator med;
    
    
public ColleagueB(Mediator m)
    
{
        med 
= m;
        med.register(
this, type);
    }
//end ColleagueB(...)
    
    
public void change()
    
{
        System.out.println(
"-----  B changed now !  -----");
        med.changed(type);
    }
//end change()
    
    
public void action()
    
{
        System.out.println(
"  B is changed by mediator ");
    }
//end action()
    
}
//end class ColleagueB

package Mediator;

public class ColleagueC extends Colleague
{
    
private final String type = "C";
    
private Mediator med;
    
    
public ColleagueC(Mediator m)
    
{
        med 
= m;
        med.register(
this, type);
    }
//end ColleagueC(...)
    
    
public void change()
    
{
        System.out.println(
"-----  C changed now !  -----");
        med.changed(type);
    }
//end change()
    
    
public void action()
    
{
        System.out.println(
"  C is changed by mediator ");
    }
//end action()
    
}
//end class ColleagueC

/*
 * MediatorPattern.java
 *
 * Created on 2006年5月4日, 下午3:47
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/


package Mediator;

/**
 *
 * 
@author Administrator
 
*/

public class MediatorPattern
{
    Mediator myMed 
= new ConcreteMediator();
    ColleagueA ca 
= new ColleagueA(myMed);
    ColleagueB cb 
= new ColleagueB(myMed);
    ColleagueC cc 
= new ColleagueC(myMed);
    
    
/** Creates a new instance of MediatorPattern */
    
public MediatorPattern()
    
{
        
//do something....
    }
//end MediatorPattern()
    
    
public void showMediatorPattern()

抱歉!评论已关闭.