using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _018观察者模式
{
public abstract class AbstractClass
{
public string Name;
public string Data;
private List<IObserver> ObserverList;
public AbstractClass(string name, string data)
{
this.Name = name;
this.Data = data;
}
public void AddObserver(IObserver observer)
{
if (ObserverList == null)
{
ObserverList = new List<IObserver>();
}
ObserverList.Add(observer);
}
public void RemoveObserver(IObserver observer)
{
if (ObserverList != null)
{
ObserverList.Remove(observer);
}
}
public void Update()
{
if (ObserverList != null)
{
ObserverList.ForEach(p => p.Update(this));
}
}
}
public class MyObserverClass : AbstractClass
{
public MyObserverClass(string name, string data) : base(name, data)
{
}
}
public interface IObserver
{
void Update(AbstractClass abclass);
}
public class MyObserver : IObserver
{
private string Name;
public MyObserver(string name)
{
this.Name = name;
}
public void Update(AbstractClass abclass)
{
Console.WriteLine("my name is " + Name + " abclass name is " + abclass.Name + " abclass data is " + abclass.Data);
}
}
internal class Program
{
private static void Main(string[] args)
{
MyObserverClass ob = new MyObserverClass("MyObserverClass", "fuck you man");
MyObserver observer1 = new MyObserver("observer1");
MyObserver observer2 = new MyObserver("observer2");
MyObserver observer3 = new MyObserver("observer3");
MyObserver observer4 = new MyObserver("observer4");
ob.AddObserver(observer1);
ob.AddObserver(observer2);
ob.AddObserver(observer3);
ob.AddObserver(observer4);
ob.Update();
/*
* 观察者模式
*
* 观察者模式其实就是将需要观察的接口加入管理类
*
* 然后管理类中留出一个接口用于通知所有需要观察的对象
*
* 这样就可以达到通知,更新的目的勒
*
* 这样的方式解耦非常方便,unity中的事件处理器差不多就是通过这种方式达到需求
*
*/
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _018观察者模式
{
public abstract class AbstractClass
{
public string Name;
public string Data;
private List<IObserver> ObserverList;
public AbstractClass(string name, string data)
{
this.Name = name;
this.Data = data;
}
public void AddObserver(IObserver observer)
{
if (ObserverList == null)
{
ObserverList = new List<IObserver>();
}
ObserverList.Add(observer);
}
public void RemoveObserver(IObserver observer)
{
if (ObserverList != null)
{
ObserverList.Remove(observer);
}
}
public void Update()
{
if (ObserverList != null)
{
ObserverList.ForEach(p => p.Update(this));
}
}
}
public class MyObserverClass : AbstractClass
{
public MyObserverClass(string name, string data) : base(name, data)
{
}
}
public interface IObserver
{
void Update(AbstractClass abclass);
}
public class MyObserver : IObserver
{
private string Name;
public MyObserver(string name)
{
this.Name = name;
}
public void Update(AbstractClass abclass)
{
Console.WriteLine("my name is " + Name + " abclass name is " + abclass.Name + " abclass data is " + abclass.Data);
}
}
internal class Program
{
private static void Main(string[] args)
{
MyObserverClass ob = new MyObserverClass("MyObserverClass", "fuck you man");
MyObserver observer1 = new MyObserver("observer1");
MyObserver observer2 = new MyObserver("observer2");
MyObserver observer3 = new MyObserver("observer3");
MyObserver observer4 = new MyObserver("observer4");
ob.AddObserver(observer1);
ob.AddObserver(observer2);
ob.AddObserver(observer3);
ob.AddObserver(observer4);
ob.Update();
/*
* 观察者模式
*
* 观察者模式其实就是将需要观察的接口加入管理类
*
* 然后管理类中留出一个接口用于通知所有需要观察的对象
*
* 这样就可以达到通知,更新的目的勒
*
* 这样的方式解耦非常方便,unity中的事件处理器差不多就是通过这种方式达到需求
*
*/
Console.ReadKey();
}
}
}