设计模式之中介者模式Mediator

将不同的对象间交互封装到一个对象中,类似黑板或者交互平台。


代码示例:

class DialogDirector{ 
	public:
	virtual ~DialogDirector();
	
	virtual void showDialog();
	virtual void widgetChanged(Widget*) = 0;
	
	protected:
	DialogDirector();
	virtual void createWidgets() = 0;
};


class Widget{
	public:
	Widget(DialogDirector*);
	virtual void changed()
	{
		_director->widgetChanged(this);
	}
	
	virtual void handleMouse(MouseEvent& event);
	
	private:
	DialogDirector* _director;
};

class ListBox : public Widget{
	public:
	ListBox(DialogDirector*);
	
	virtual const char* getSelection();
	virtual void setList(List<char*>* listItems);
	virtual void handleMouse(MouseEvent& event);
};

class EntryField : public Widget{
	public:
	EntryField(DialogDirector*);
	
	virtual void setText(const char* text);
	virtual const char* getText();
	virtual void handleMouse(MouseEvent& event);
};

class Button : public Widget{
	public:
	Button(DialogDirector*);
	
	virtual void setText(const char* text);
	virtual void handleMouse(MouseEvent& event)
	{
		changed();
	}
};

class FontDialogDirector : public DialogDirector{
	public:
	FontDialogDirector();
	virtual ~FontDialogDirector();
	virtual void widgetChanged(Widget* theChangedWidget)
	{
		if(theChangedWidget == _fontList)
		{
			_fontName->setText(_fontList->getSelection());
		}
		else if(theChangedWidget == _ok)
		{
			//apply font change and dismiss dialog
		}
		else if(theChangedWidget == _cancel)
		{
			//dismiss dialog
		}
	}
	
	protected:
	virtual void createWidget()
	{
		_ok = new Button(this);
		_cancel = new Button(this);
		_fontList = new ListBox(this);
		_fontName = new EntryField(this);
	}
	
	private:
	Button* _ok;
	Button* _cancel;
	ListBox* _fontList;
	EntryField* _fontName;
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值