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

设计模式-结构型模式-中介者

2017年12月08日 ⁄ 综合 ⁄ 共 2701字 ⁄ 字号 评论关闭

行为模式涉及到算法和对象间职责的分配。
mediator:用一个中介对象来封装一系例的对象交互,中介者使各对象不需要显式的相互引用,从而使其耦合松散。而且独立地改变他们之间的交互。

 

package behaviour.mediator;
/**
 *  An abstract colleague
 */
public interface Colleague {
    public void Change();
    public void Action();
}

 

package behaviour.mediator;
/**
 *  A concrete colleague
 */
import java.io.*;

public class ColleagueA implements Colleague {
    private final String type = "A";
    private Mediator med;
   
    public ColleagueA(Mediator m) {
        med = m;
        med.Register(this, type);
    }
    public void Change() {
        System.out.println("-----  A changed now !  -----");
        med.Changed(type);
    }
    public void Action() {
        System.out.println("  A is changed by mediator ");
    }
}

 

package behaviour.mediator;
/**
 *  A concrete colleague
 */
import java.io.*;

public class ColleagueB implements Colleague {
    private final String type = "B";
    private Mediator med;
    public ColleagueB(Mediator m) {
        med = m;
        med.Register(this, type);
    }
    public void Change() {
        System.out.println("-----  B changed now !  -----");
        med.Changed(type);
    }
    public void Action() {
        System.out.println("  B is changed by mediator ");
    }
}

 

package behaviour.mediator;
/**
 *  A concrete colleague
 */
import java.io.*;

public class ColleagueC implements Colleague {
    private final String type = "C";
    private Mediator med;
    public ColleagueC(Mediator m) {
        med = m;
        med.Register(this, type);
    }
    public void Change() {
        System.out.println("-----  C changed now !  -----");
        med.Changed(type);
    }
    public void Action() {
        System.out.println("  C is changed by mediator ");
    }
}

 

package behaviour.mediator;
/**
 *  A concrete mediator
 */
public class ConcreteMediator implements Mediator {
    private ColleagueA a;
    private ColleagueB b;
    private ColleagueC c;

    public ConcreteMediator() {
    }
    public void Register(Colleague colleague, String type) {
        if(type == "A") {
                a = (ColleagueA)colleague;
        } else if (type == "B") {
                b = (ColleagueB)colleague;
        } else if (type == "C") {
                c = (ColleagueC)colleague;
        }
    }
    public void Changed(String type) {
        if(type == "A") {
                b.Action();
                c.Action();
        } else if (type == "B") {
                a.Action();
                c.Action();
        } else if (type == "C") {
                a.Action();
                b.Action();
        }
    }
}

 

package behaviour.mediator;
/**
 *  An abstract Mediator
 */
public interface Mediator  {
    public void Register(Colleague c, String type);
    public void Changed(String type);
}

 

package behaviour.mediator;
/**
 *  A test client
 */
public class Test  {
    public static void main(String[] args) {
        Mediator myMed = new ConcreteMediator();
        ColleagueA a = new ColleagueA(myMed);
        ColleagueB b = new ColleagueB(myMed);
        ColleagueC c = new ColleagueC(myMed);

        a.Change();
        b.Change();
        c.Change();
    }
}

抱歉!评论已关闭.