观察者模式--实例

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:  
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。


 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
            <2>从Mouse和Master中提取抽象(5分)
            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分) 

 

 

代码
using System;
using System.Collections;

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();
            Console.Read();
        }
    }

 

 

posted on 2010-01-04 16:48  laodao1  阅读(242)  评论(0编辑  收藏  举报

导航