Program design: The cat shouted, all the mice began to flee, the owner was awakened. (C # language)
Requirements:
1. To have linkage, the behavior of the mouse and the host is passive.
2. Considering scalability, cat calls can cause other linkage effects.
Main points: 1. Linkage effect, run the code as long as the cat.cryed () method is executed. 2. Abstract the mouse and the host
Rating criteria: <1> Constructs a cat, Mouse, master three classes, and enables the program to run (2 points)
<2> extract abstraction from Mouse and master (5 points)
<3> linkage effect, as long as the implementation of cat.cryed () can make the mouse escape, the owner awakened. (3 points)
public interface Observer
{
void Response (); Response of the Observer, as the mouse sees the cat's reflection
}
public interface Subject
{
void Aimat (Observer obs); For which observers, this refers to the object of the cat's arrest---the mouse
}
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 ();
}
}
//---------------------------------------------------------------------------------------------
Design method Two: Use event--delegate design.
public delegate void Subeventhandler ();
Public abstract class Subject
{
public event Subeventhandler SubEvent;
protected void Fireaway ()
{
if (this. SubEvent!= null)
This. SubEvent ();
}
}
public class Cat:subject
{
public void Cry ()
{
Console.WriteLine ("Cat cryed.");
This. Fireaway ();
}
}
Public abstract class Observer
{
Public Observer (Subject sub)
{
Sub. SubEvent + = new Subeventhandler (Response);
}
public abstract void Response ();
}
public class Mouse:observer
{
private string name;
Public Mouse (string name, Subject sub): Base (sub)
{
THIS.name = name;
}
public override void Response ()
{
Console.WriteLine (name + "attempt to escape!");
}
}
public class Master:observer
{
Public Master (Subject sub): Base (sub) {}
public override void Response ()
{
Console.WriteLine ("Host Waken");
}
}
Class Class1
{
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 ();
}
}