设计模式练习(15)——中介者模式

中介者模式

1、题目:java

某软件公司须要开发一套图形用户界面类库,该类库包含若干个预约义的窗格对象,例如TextPane,ListPane,GraphicPane,窗口之间不容许直接调用,具备该类库的应用由一个包含一组窗格的窗口(Window)组成,窗口须要协调窗格之间的行为,采用中介者模式收集系统
(1)绘制中介者模式结构视图
(2)给出实例类图并实现代码。web

2、所用模式结构视图: ide

这里写图片描述

3、实例类图:svg

这里写图片描述

4、实例实现代码: this

(由于区分,因此在类的前面加了Gj19) spa

抽象中介者 -窗口code

package gjMediatorPattern;

/** * 抽象中介者 -窗口 * @author gongjian * */
public abstract class Gj19Window {
    public abstract void doSomeThing(Gj19Pane pane,String order);
}

具体中介者 xml

package gjMediatorPattern;
/** * 具体中介者 * @author gongjian */
public class Gj19ConcreteWindow extends Gj19Window{
    private Gj19GraphicPane graphicPane;
private Gj19ListPane listPane;
    private Gj19TextPane textPane;

    public Gj19GraphicPane getGraphicPane() {
        return graphicPane;
    }
    public void setGraphicPane(Gj19GraphicPane graphicPane) {
        this.graphicPane = graphicPane;
    }
    public Gj19ListPane getListPane() {
        return listPane;
    }
    public void setListPane(Gj19ListPane listPane) {
        this.listPane = listPane;
    }
    public Gj19TextPane getTextPane() {
        return textPane;
    }
    public void setTextPane(Gj19TextPane textPane) {
        this.textPane = textPane;
    }

    public Gj19ConcreteWindow(Gj19GraphicPane graphicPane,
            Gj19ListPane listPane,Gj19TextPane textPane) {
        this.graphicPane = graphicPane;
        this.listPane = listPane;
        this.textPane = textPane;
    }
    @Override
    public void doSomeThing(Gj19Pane pane, String order) {
        pane.update(order);
    }
}

抽象同事类-窗口格对象

package gjMediatorPattern;

/** * 抽象同事类-窗口格 * * @author gongjian * */
public abstract class Gj19Pane {

    private Gj19Window window;



    public Gj19Window getWindow() {
        return window;
    }



    public void setWindow(Gj19Window window) {
        this.window = window;
    }



    public abstract void update(String order);

}

具体同事类blog

package gjMediatorPattern;
/** * 具体同事类 * @author gong * */
public class Gj19TextPane extends Gj19Pane{


    @Override
    public void update(String order) {
        System.out.println("TextPane接收到指令"+order);
    }

}

具体同事类

package gjMediatorPattern;
/** * 具体同事类 * @author gong * */
public class Gj19GraphicPane extends Gj19Pane{


    @Override
    public void update(String order) {
        System.out.println("GraphicPane接收到指令"+order);
    }


}

具体同事类

package gjMediatorPattern;
/** * 具体同事类 * @author gong * */
public class Gj19ListPane extends Gj19Pane{

    @Override
    public void update(String order) {
        System.out.println("ListPane接收到指令"+order);
    }

}

中介者模式客户端

package gjMediatorPattern;
/** * 中介者模式客户端 * @author gong * */
public class Client {

    public static void main(String[] args) {

        Gj19ListPane gj19ListPane =new Gj19ListPane();
        Gj19TextPane gj19TextPane = new Gj19TextPane();
        Gj19GraphicPane gj19GraphicPane = new Gj19GraphicPane();
        Gj19ConcreteWindow concreteWindow = new Gj19ConcreteWindow(gj19GraphicPane,gj19ListPane, gj19TextPane);
        System.out.println("============系统发出请求===============");
        concreteWindow.doSomeThing(gj19GraphicPane, "图像放大1.2倍");
        concreteWindow.doSomeThing(gj19TextPane, "文本缩小到原来的0.8倍");
        concreteWindow.doSomeThing(gj19ListPane, "列表左移10px");
        System.out.println("=============系统结束===================");
    }

}

5、运行结果:

这里写图片描述