观察者模式,越详细越好.200分送上.大伙看分的份上啊
观察者模式,越详细越好.200分送上.大家看分的份上啊。
观察者模式,越详细越好.200分送上.大家看分的份上啊。
------解决方案--------------------
观察者模式,越详细越好.200分送上.大家看分的份上啊。
------解决方案--------------------
//Subject.cs
using System;
namespace Observer
{
/// <summary>
/// Summary description for Subject.
/// </summary>
public interface Subject {
void registerInterest(Observer obs);
}
}
//ListObs.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Observer
{
/// <summary>
/// Summary description for ListObs.
/// </summary>
public class ListObs : System.Windows.Forms.Form, Observer
{
private System.Windows.Forms.ListBox lsColors;
/// <summary>
/// Adds text of color to list box
/// </summary>
private System.ComponentModel.Container components = null;
public ListObs(Subject subj) {
InitializeComponent();
init(subj);
}
//------
public void init(Subject subj) {
subj.registerInterest (this);
}
//------
public void sendNotify(string message){
lsColors.Items.Add(message);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.lsColors = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// lsColors
//
this.lsColors.Location = new System.Drawing.Point(16, 16);
this.lsColors.Name = "lsColors";
this.lsColors.Size = new System.Drawing.Size(216, 173);
this.lsColors.TabIndex = 0;
//
// ListObs
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(264, 213);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.lsColors});
this.Name = "ListObs";
this.Text = "List observer";
this.ResumeLayout(false);
}
#endregion
}
}
//Observer.cs
using System;
namespace Observer
{
/// <summary>
/// Summary description for Observer.
/// </summary>
public interface Observer {
void sendNotify(string message);
}
}
//ColObserver.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Observer
{
/// <summary>
/// Summary description for ColObserver.
/// </summary>
public class ColObserver : System.Windows.Forms.Form, Observer {
private System.ComponentModel.Container components = null;
private Brush bBrush;
private System.Windows.Forms.PictureBox pic;
private Font fnt;
private Hashtable colors;
private string colName;
//-----
public ColObserver(Subject subj) {
InitializeComponent();
init(subj);
}
//-----
private void init(Subject subj) {
subj.registerInterest (this);
fnt = new Font("arial", 18, FontStyle.Bold);
bBrush = new SolidBrush(Color.Black);
pic.Paint+= new PaintEventHandler (paintHandler);
colors = new Hashtable ();
colors.Add("red", Color.Red );
colors.Add ("blue", Color.Blue );
colors.Add ("green", Color.Green );
colName = "";
}
//-----
public void sendNotify(string message) {
colName = message;
message = message.ToLower ();
Color col = (Color)colors[message];
pic.BackColor = col;
}
//-----
private void paintHandler(object sender, PaintEventArgs e) {
Graphics g = e.Graphics ;
g.DrawString(colName, fnt, bBrush, 20, 40);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )