using System;
using System.Collections;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
// class Class1
// {
// /// <summary>
// /// 應用程序的主入口點。
// /// </summary>
// [STAThread]
// static void Main(string[] args)
// {
// //
// // TODO: 在此處添加代碼以啓動應用程序
// //
// }
// }
// public abstract class A
// {
// public A()
// {
// Console.WriteLine('a');
// }
// public virtual void Fun()
// {
// Console.WriteLine("A.Fun()");
// }
// }
//
// public class B: A
// {
// public B()
// {
// Console.WriteLine('b');
// }
//
// public new void Fun()
// {
// Console.WriteLine("B.Fun()");
// }
//
// public static void Main()
// {
// A a = new B();
// a.Fun();
// }
// }
// public class A
// {
// public virtual void Fun1(int i)
// {
// Console.WriteLine(i);
// }
//
// public void Fun2(A a)
// {
// a.Fun1(1);
// Fun1(5);
// }
// }
//
//
// public class B : A
// {
// public override void Fun1(int i)
// {
// base.Fun1 (i + 1);
// }
//
// public static void Main()
// {
// B b = new B();
// A a = new A();
// a.Fun2(b);
// b.Fun2(a);
// }
// }
// public class myClass
// {
// public static int func( int j){
//
//// func(1)=1;
//// func(2)=1;
// int fun=1;
// if (j<3) return 1;
// //for ( int i=0; i<j+1;i++){
// //func(j)=
// return (func(j-1)+func(j-2));
// //}
// //return func(j);
//
// }
// public static void Main(){
// Console.WriteLine("end ");
// int me=func(4);
// Console.WriteLine(me);
// //((string)func(4));
// }
// }
public interface Observer
{
void Response(); //觀察者的響應,如是老鼠見到貓的反映
}
public interface Subject
{
void AimAt(Observer obs); //針對哪些觀察者,這裏指貓的要撲捉的對象---老鼠
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject subj)
{
this.name = name;
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject subj)
{
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine("Host waken!");
}
}
public class Cat : Subject
{
private ArrayList observers;
public Cat()
{
this.observers = new ArrayList();
}
public void AimAt(Observer obs)
{
this.observers.Add(obs);
}
public void Cry()
{
Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers)
{
obs.Response();
}
}
}
class MainClass
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat);
cat.Cry();
}
}
}