写点什么

设计模式的艺术 第二十章中介者模式练习(设计一套图形界面类库,包含若干预定义的窗格(Pane)对象,如 TextPane、ListPane 等,窗格之间不允许直接引用。基于该类库的应用由一个包含一组窗格的窗口(Window)组成,窗口协调窗格之间的行为)

作者:代廉洁
  • 2022 年 9 月 01 日
    浙江
  • 本文字数:1428 字

    阅读完需:约 5 分钟

Sunny 软件公司欲开发一套图形界面类库。该类库需要包含若干预定义的空格(Pane)对象,例如 TextPane、ListPane、GraphicPane 等,窗格之间不允许直接引用。基于该类库的应用由一个包含一组窗格的窗口(Window)组成,窗口需要协调窗格之间的行为。试采用中介者模式设计该系统。


一、类结构图



二、典型实现代码


中介者类:抽象中介者类
// 中介者类:抽象中介者类public abstract class Mediator {    public abstract void paneChanged(Pane pane);}
复制代码


抽象窗格类:抽象同事类
// 抽象窗格类:抽象同事类public abstract class Pane {    protected Mediator mediator;
public void setMediator(Mediator mediator) { this.mediator = mediator; }
public void changed() { this.mediator.paneChanged(this); }
public abstract void update();}
复制代码


窗口中介者类:具体中介者类
// 窗口中介者类:具体中介者类public class WindowMediator extends Mediator{    public TextPane textPane;    public ListPane listPane;    public GraphicPane graphicPane;
@Override public void paneChanged(Pane pane) { if (pane == this.textPane) { listPane.select(); graphicPane.draw(); } if (pane == this.listPane) { textPane.update(); graphicPane.update(); } if (pane == this.graphicPane) { textPane.update(); listPane.update(); } }}
复制代码


文本窗格类:具体同事类
// 文本窗格类:具体同事类public class TextPane extends Pane{    @Override    public void update() {        System.out.println("textPane对象新增内容");    }}
复制代码


列表窗格类:具体同事类
// 列表窗格类:具体同事类public class ListPane extends Pane{    @Override    public void update() {        System.out.println("listPane对象新增内容");    }
public void select() { System.out.println("listPane对象选中内容"); }}
复制代码


图形窗格类:具体同事类
// 图形窗格类:具体同事类public class GraphicPane extends Pane{    @Override    public void update() {        System.out.println("graphicPane对象新增内容");    }
public void draw() { System.out.println("graphicPane对象绘制内容"); }}
复制代码


客户端代码:
public class Client {    public static void main(String[] args) {        WindowMediator windowMediator;        windowMediator = new WindowMediator();
TextPane textPane = new TextPane(); ListPane listPane = new ListPane(); GraphicPane graphicPane = new GraphicPane();
textPane.setMediator(windowMediator); listPane.setMediator(windowMediator); graphicPane.setMediator(windowMediator);
windowMediator.textPane = textPane; windowMediator.listPane = listPane; windowMediator.graphicPane = graphicPane;
textPane.changed(); System.out.println(); graphicPane.changed(); }}
复制代码


编译并运行程序,输出如下结果:
listPane对象选中内容graphicPane对象绘制内容
textPane对象新增内容listPane对象新增内容
复制代码


发布于: 刚刚阅读数: 3
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第二十章中介者模式练习(设计一套图形界面类库,包含若干预定义的窗格(Pane)对象,如TextPane、ListPane等,窗格之间不允许直接引用。基于该类库的应用由一个包含一组窗格的窗口(Window)组成,窗口协调窗格之间的行为)_设计模式的艺术_代廉洁_InfoQ写作社区