Observer

using System;
using System.Collections.Generic;
using System.Text;

namespace Design_Pattern.Observer
{
    
public delegate void SubEventHandler();

    
public abstract class Subject
    
{
        
public event SubEventHandler subEvent;

        
protected void OnFireWay()
        
{
            
if (this.subEvent != null)
            
{
                subEvent();
            }

        }


        
public abstract void Cry();
    }


        
public class Cat:Subject
        
{
            
public override void Cry()
            
{
                
this.OnFireWay();
            }

        }


        
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 override void Response()
            
{
                Console.WriteLine(
this.name+"   Wa!!Run");
            }


            
public Mouse(string name, Subject sub):base(sub)
            
{
                
this.name = name;
            }

        }


        
public class Test2
        
{
           
public static void Main()
            
{
                Console.WriteLine(
"HEllO");
                Subject sub 
= new Cat();
                Console.WriteLine(
"1");
                Observer mouse1 
= new Mouse("mouse1", sub);
                Observer mouse2 
= new Mouse("mouse2", sub);
                sub.Cry();
                Console.ReadLine();
            }

        }

}



/*
 * 类应该依赖于抽象 而不应该依赖于具体类 依赖倒置原则
 * 面向接口编程 接口稳定 表达了契约的合同
 * 单一职责原则
 * 开闭原则
 
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace DesignPattern.Observer2
{
   
// public delegate void AccountChangedEventhandler(Object sender, EventArgs args);
   public delegate void AccountChangedEventhandler();

    
class BankAccount 
    
{
        
public event AccountChangedEventhandler AccountChanged;

        
private void OnAccountChanged()
        
{
            
if (AccountChanged != null)
            
{
                AccountChanged();
            }

        }


        
public new void WithDraw()
        
{
            
//.
            this.OnAccountChanged();
        }

    }


    
interface IObserver
    
{
        
void Send();
    }


    
class Mailer : IObserver
    
{
        
public void Send()
        
{
            Console.WriteLine(
"Send email message");
        }


    }


    
class Mobile : IObserver
    
{
        
public void Send()
        
{
            Console.WriteLine(
"Send Mobile message");
        }

    }


    
class App
    
{
        
//public static void Main()
        
//{
        
//    BankAccount account = new BankAccount();
        
//    //Mobile mobile = new Mobile();

        
//    account.AccountChanged += new AccountChangedEventhandler(new Mobile().Send);
        
//    account.AccountChanged += new AccountChangedEventhandler(new Mailer().Send);

        
//    account.WithDraw();

        
//    Console.ReadLine();
        
//}
    }

}

posted @ 2008-05-29 17:09  晓岚  阅读(209)  评论(0)    收藏  举报