您的位置:首页 > 其它

中介者模式(Mediator)(对象行为型模式)

2017-06-29 11:10 429 查看
参考文档:

1.设计模式-可复用面向对象软件的基础

2.http://blog.csdn.net/hguisu/article/details/7554612(设计模式 ( 十五 ) 中介者模式Mediator(对象行为型))

中介者模式(Mediator)(对象行为型模式)

理论方面的知识,可以参考  参考文档。

看一下mediator的结构:









代码实现:

DialogDirector.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public abstract class DialogDirector {

public DialogDirector() {
}

public abstract void showDialog();

public abstract void widgetChanged(Widget widget);

public abstract void createWidgets();
}

FontDialogDirector.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public class FontDialogDirector extends DialogDirector {
private Button _ok, _cancel;
private ListBox listBox;
private EntryField entryField;

@Override
public void createWidgets() {
_ok = new Button(this);
_cancel = new Button(this);
listBox = new ListBox(this);
entryField = new EntryField(this);
}

@Override
public void showDialog() {
System.out.println("显示对话框");
}

@Override
public void widgetChanged(Widget theChangedWidget) {
if (theChangedWidget == listBox) {
entryField.setText(listBox.getSelection());
} else if (theChangedWidget == _ok) {
System.out.println("提交");
} else if (theChangedWidget == _cancel) {
System.out.println("取消对话框");
}
}

public Button get_ok() {
return _ok;
}

public void set_ok(Button _ok) {
this._ok = _ok;
}

public Button get_cancel() {
return _cancel;
}

public void set_cancel(Button _cancel) {
this._cancel = _cancel;
}

public ListBox getListBox() {
return listBox;
}

public void setListBox(ListBox listBox) {
this.listBox = listBox;
}

public EntryField getEntryField() {
return entryField;
}

public void setEntryField(EntryField entryField) {
this.entryField = entryField;
}
}

Widget.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public abstract class Widget {
private DialogDirector dialogDirector;

public Widget(DialogDirector dialogDirector) {
this.dialogDirector = dialogDirector;
}

public void changed() {
dialogDirector.widgetChanged(this);
}

public abstract void handleMouse(MouseEvent mouseEvent);

}

ListBox.java:

package com.rick.designpattern.mediator;

import java.util.ArrayList;
import java.util.List;

/**
* Created by MyPC on 2017/6/23.
*/
public class ListBox extends Widget {
private List<String> listItems;

private int position;

public ListBox(DialogDirector dialogDirector) {
super(dialogDirector);
listItems = new ArrayList<String>();
listItems.add("1");
listItems.add("2");
listItems.add("3");
listItems.add("4");
listItems.add("5");
}

public String getSelection() {
if (null == listItems || listItems.size() <= 0) {
return "";
} else {
return listItems.get(position);
}
}

public void setList(List<String> listItems) {
this.listItems = listItems;
}

@Override
public void handleMouse(MouseEvent mouseEvent) {
position = mouseEvent.getY();
}
}

EntryField.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public class EntryField extends Widget {
private String text;

public EntryField(DialogDirector dialogDirector) {
super(dialogDirector);
}

public void setText(String text) {
this.text = text;
System.out.println(text);
}

public String getText() {
return text;
}

@Override
public void handleMouse(MouseEvent mouseEvent) {

}
}

Button.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public class Button extends Widget {
private String buttonText;

public Button(DialogDirector dialogDirector) {
super(dialogDirector);
}

public void setText(String text) {
this.buttonText = text;
System.out.println(text);
}

@Override
public void handleMouse(MouseEvent mouseEvent) {
changed();
}
}

MouseEvent.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public class MouseEvent {

private int x, y;

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}
}

Client.java:

package com.rick.designpattern.mediator;

/**
* Created by MyPC on 2017/6/23.
*/
public class Client {

public static void main(String[] args) {

FontDialogDirector fontDialogDirector = new FontDialogDirector();
fontDialogDirector.createWidgets();
fontDialogDirector.showDialog();

fontDialogDirector.widgetChanged(fontDialogDirector.get_ok());
fontDialogDirector.widgetChanged(fontDialogDirector.get_cancel());
fontDialogDirector.widgetChanged(fontDialogDirector.getListBox());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式