设计模式之观察者用委托的方式实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleDelegate514
{
class Program
{
static void Main( string[ ] args )
{
Person person = new Person( );
message mess = new message( person, "美女即将下凡了" );
message mess1 = new message( person, "不要在挖鼻孔了 " );
person.state = "气象局";
person.AddOberser( new EventHandlers( mess1.Message ) );
person.AddOberser( mess.Message );
person.AddOberser( mess1.Message );
person.Remoce( mess1.Message );
person.Live( );
Console.ReadLine( );
}
}
//public delegate void EventHandlers( Person persin, string msg );
public delegate void EventHandlers( );
public class Person
{
public string state { get; set; }
List<EventHandlers> lice = new List<EventHandlers>( );
//添加委托
public void AddOberser( EventHandlers eventHandlers )
{
lice.Add( eventHandlers );
}
/// <summary>
/// 移出委托
/// </summary>
/// <param name="eventHandlers"></param>
public void Remoce( EventHandlers eventHandlers )
{
lice.Remove( eventHandlers );
}
/// <summary>
/// 通知观察者
/// </summary>
public void Live( )
{
foreach ( EventHandlers eventHandlers in lice )
{
//this,"我是谁!"
eventHandlers( );
}
}
}
public class message
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value.Trim( );
}
}
private Person person;
public message(Person person,string name )
{
this.person = person;
this.name = name;
}
public void Message( )
{
Console.WriteLine( "收到来自 {0} 的消息,男士们:{1}", person.state, name );
Console.WriteLine( "收到来自 {0} 的消息,女士:{1}", person.state, name );
}
}
}
//----------------------------------------------------------------------------------------
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System;
namespace 观察者
{
public interface IServer
{
void Notice( IClient C);
}
public interface IClient
{
void Show();
}
public class Person : IClient
{
public Person( IServer S )
{
C.Notice(this);
}
public void Show()
{
Console.WriteLine("主人被惊醒了");
}
}
public class Mouses : IClient
{
public Nouses( IServer S )
{
C.Notice( this );
}
public void Show()
{
Console.WriteLine("老鼠被吓跑了");
}
}
public class Tom : IServer
{
ArrayList al =new ArrayList();
public void Notice(IClient C)
{
al.Add( C );
}
public void Runs()
{
Console.WriteLine("猫叫了");
foreach (IClient item in al)
{
item.Show();
}
}
}
class Test
{
static void Main(string[] args)
{
Tom t=new Tom();
Person p=new Person(t);
Mouses m =new Mouses(p);
t.Runs();
}
}
}