設計模式_觀察者模式
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
//觀察者模式 1,抽象主題(要觀察的東東)2,實現主題 3,抽象觀察者 4,實現觀察者
//抽象主題要實現的功能:新增及刪除觀察者,主題變化了,要通知觀察者
public abstract class subject //抽象類可以共存抽象方法與非抽象方法
{
private ArrayList bservers = new ArrayList();//儲存觀察者集合
public void add(observer observer)
{
observers.Add(observer);
}
public void delete(observer observer)
{
observers.Remove(observer);
}
//主題發生變化要通知觀察者
public void notify()
{
foreach (observer obs in observers)
//最終透過呼叫觀察者update方法實現通知觀察者,主題發生了變化
obs.update();
}
}
public class concretesubject : subject
{
//在具體的主題中新增具體的主題資訊吧
private string subjectstatus;
public string Subjectstatus
{
get
{
return subjectstatus;
}
set
{
subjectstatus = value;
}
}
}
public abstract class observer
{
public abstract void update();//具體的通知在子類實現
}
public class concreteobserver : observer
{
//觀察者要知道觀察哪些主題吧
private string name;//觀察者名字
private string observerstatus;//儲存主題的變化資料
private concretesubject sub;
public concreteobserver(concretesubject sub, string name)
{
this.sub = sub;
this.name = name;
}
//觀察者中實現更新方法,用於接收主題的變化資料
public override void update()
{
bserverstatus = this.sub.Subjectstatus;
Console.WriteLine("觀察者{0}的新狀態是:{1}", name, observerstatus);
}
}
//客戶端
class Program
{
static void Main(string[] args)
{
//在客戶調呼叫觀察者模式
//例項化一個真實主題
concretesubject conc = new concretesubject();
conc.Subjectstatus = "111";
//在真實主題新增多個觀察者
concreteobserver obj1 = new concreteobserver(conc, "翟勳楊");
conc.add(obj1);
//observer obj2 = new concreteobserver(conc, "翟勳章");
//conc.add(obj2);
conc.notify();
Console.ReadKey();
}
}
}
後記:
public concreteobserver(concretesubject sub, string name)
{
this.sub = sub;
this.name = name;
}
上述程式碼一定要加this,不然會導致sub沒有初始化值,或者採用全域性與區域性變數區別命名的方法來實現.
小結:1,區域性變數與全域性變數的命名一定要規範
2,僅看程式碼差太遠,一定要編寫,起碼把人家的程式碼敲寫一次也是大有裨益
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-732814/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式----觀察者模式設計模式
- 設計模式 —— 觀察者模式設計模式
- 設計模式(觀察者模式)設計模式
- 設計模式——觀察者模式設計模式
- 設計模式-觀察者模式設計模式
- 【設計模式】觀察者模式設計模式
- 設計模式(十六)觀察者模式設計模式
- PHP設計模式-觀察者模式PHP設計模式
- 設計模式(9) 觀察者模式設計模式
- 設計模式-觀察者模式上設計模式
- 設計模式-觀察者模式下設計模式
- Java設計模式-觀察者模式Java設計模式
- 設計模式解析:觀察者模式設計模式
- JS設計模式(觀察者模式)JS設計模式
- 設計模式之觀察者模式設計模式
- 設計模式 #6 (觀察者模式)設計模式
- 設計模式之-觀察者模式設計模式
- 設計模式之【觀察者模式】設計模式
- javascript設計模式觀察者模式JavaScript設計模式
- 設計模式:觀察者模式(observer)設計模式Server
- 設計模式-單例模式,觀察者模式設計模式單例
- PHP 設計模式之觀察者模式PHP設計模式
- PHP設計模式之觀察者模式PHP設計模式
- Go 設計模式之觀察者模式Go設計模式
- 設計模式之觀察者模式(一)設計模式
- JavaScript設計模式之觀察者模式JavaScript設計模式
- 簡說設計模式——觀察者模式設計模式
- PHP 設計模式之——觀察者模式PHP設計模式
- 設計模式中的觀察者模式設計模式
- 設計模式實戰 - 觀察者模式設計模式
- golang設計模式之觀察者模式Golang設計模式
- PHP設計模式(5)—— 觀察者模式PHP設計模式
- Java 設計模式之《觀察者模式》Java設計模式
- 設計模式解析-1:觀察者模式設計模式
- 徒手擼設計模式-觀察者模式設計模式
- 極簡設計模式-觀察者模式設計模式
- GoLang設計模式13 - 觀察者模式Golang設計模式
- Python 設計模式——觀察者模式Python設計模式