C#设计模式之20——观察者模式

观察者模式可以用来同时以多种方式表示数据。我们可能有一组数据,然后希望同时在用户界面用多种表示方式显示这组数据,比如用表格和绘图的两种方式。并且当数据发生变化的时候我们希望数据的显示能够自动的更新,这就需要我们使用观察者模式。

观察者模式假设包含数据的对象与显示的对象是分离的,显示对象就需要观察数据中的变化。

在实现观察者模式的时候,我们通常把数据成为主题(Subject),把每种显示方式成为观察者(Observer).

观察者都有一个为其他对象所知的接口,这样当数据放生变化的时候主题就可以通过调用这个接口告知观察者数据的变化。

观察者统一的接口定义为:

using System;

namespace Observer
{
	/// <summary>
	/// Summary description for Observer.
	/// </summary>
	public interface Observer 	{
		void sendNotify(string message);
	}
}


主题的接口:

using System;

namespace Observer
{
	/// <summary>
	/// Summary description for Subject.
	/// </summary>
	public interface Subject 	{
		 void registerInterest(Observer obs);
	}
}


我们的一个简单例子,在主程序面板中有三个颜色选择按钮,单击一个按钮在另外两个面板中会显示对应的颜色文字和对应的颜色。这样就需要两个显示面板作为观察者观察主面板这个主题中的数据的变化。

程序的截图如下:

 

这样,主窗口在这里就是我们的主题,主题的定义如下:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Observer
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form, Subject
	{
		private System.Windows.Forms.GroupBox groupBox1;
		private System.Windows.Forms.RadioButton opRed;
		private System.Windows.Forms.RadioButton opGreen;
		private System.Windows.Forms.RadioButton opBlue;
		private ArrayList observers;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			InitializeComponent();
			init();
		}
		private void init() {
			EventHandler evh = new EventHandler (opButton_Click);
			opRed.Click += evh;
			opBlue.Click += evh;
			opGreen.Click += evh;
			observers =  new ArrayList ();
			ListObs lobs = 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值