隨著變化而變化(Observer) (轉)
對於很多事物.都在不斷變化.也就是說.在不斷變化的情況下.我們必須能夠得到其
相互關聯的之間的變化.也就是能夠通知到其他物件.但不同於牽一動百的情況
因為畢竟只是告訴相互關聯的物件與之對應的數值才發生變化.換句話就是某個物件
的狀態發生變化.於它相對應的一組物件將要隨著變化.這裡就引出了觀察者.通知者
的對應關係.觀察者發現變化.通知者就告訴每個與之相關的物件都發生相應的變化.
這也就是所謂的Observer.如同往常一樣我們還是從抽象物件開始
下面還是假設一種情況.假設你是個小學生.你的成績提高了10分.你的零用錢就增加
5%.並且父母對你的關愛程度提高3.相反就隨之減少.(這只是打個比方.)
//首先構造抽象類
abstract class Student{
public string sName;
public int Grade;
public int LoveLevel;
public int Money;
portected IObserver ob;
public Student(string n, int g, int l,int m){
sName=n;
Grade=g;
LoveLevel=l;
Money=m;
}
public void AddObserver (IObserver o){
this.ob=o;
this.ob.ObGrade=this.Grade;
}
public void RemoveObserver(){
this.ob=null
this.ob.ObGrade=-1;
}
public void Notify(){
ob.Update();
}
}
//實現學生物件(其實是為了擴充套件才這樣做的)
public class myStudent: Student{
//如果你想可以加入你想要的東西
public myStudent(string s,int g,int l,int m){base(s,g,l,m);}
}
下面我們就是要構造Observer物件了.考慮Observer物件應該做什麼?很顯然.就是
觀察學生的成績是否發生變化.並做出相應的處理.
interface IObserver {
Student student{get;set;};
void Update();
}
//實現Observer物件
public class StudentObserver : IObserver{
private Student s;
public int ObGrade
public Student student{
get{return s;}
set{s=value;}
}
public void Update(){
if((s.Grade-this.ObGrade)>=10){
s.Money+=s.Money*0.05;
s.LoveLevel+=3;
this.ObGrade=s.Grade;
Console.WriteLine("{0}由於成績變差金錢數為:{1}
愛心指數為:{2}",s.sName,s.Money,s.LoveLevel);
}
else if((this.ObGrade-s.Grade)>=10){
s.Money+=s.Money*0.05;
s.LoveLevel+=3;
this.ObGrade=s.Grade;
Console.WriteLine("{0}由於成績變好金錢數為:{1}
愛心指數為:{2}",s.sName,s.Money,s.LoveLevel);
}
else{
this.ObGrade=s.Grade;
Console.WriteLine("無變化")
return;
}
}
}
//下面看看
public class Client{
public static int Main(string[] args){
myStudent s=new myStudent("yarshray",60,90,100);
IObserver Io=new StudentObserver();
s.AddObser(Io);
s.Notify();
s.Grade-=10;
s.Notify();
s.Grade+=11;
s.Notify();
return 0;
}
}
學生成績一旦發生變化,就立刻通知觀察者.同時觀察者作出相應.這裡如果使用ArrayList
是可以觀察一組學生物件的.為了方面沒有那麼做.具體情況具體應用
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ReactNative字型大小不隨系統字型大小變化而變化React
- 背景圖片,banner圖片隨螢幕大小變化而變化
- android短視訊開發,設定APP字型大小不隨著系統變化而改變AndroidAPP
- 直播軟體搭建,狀態列顏色跟隨裝置系統變化而變化
- 監聽Dom節點變化 - Mutation ObserverServer
- Hub Entertainment:研究顯示觀眾隨著他們的電視機發展而變化AI
- 跟著sleep看jvm執行緒變化JVM執行緒
- Web技術持續演進,英特爾助力其隨變而變Web
- css實現高度height隨寬度width變化保持比例不變CSS
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務Vue變數
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務...Vue變數
- 華為後臺某應用商品展示價格幣種隨其他應用配置而變化
- el-select顯示名稱(label)沒有隨著選擇的改變而更新問題
- 神經網路語言模型中,詞向量為什麼可以隨著模型的迭代而改變?神經網路模型
- excel排序怎麼讓後面的資料跟著動 excel設定B列跟隨A列變化Excel排序
- WPP報告:內容、轉化與變現
- JDK 版本變化JDK
- android 14變化Android
- 變數含義,臨近變化變數
- 在 Laravel 中將 PHP 變數轉化為 JavaScript 變數並輸出LaravelPHP變數JavaScript
- 從思維轉變看數字化轉型 IT 經營
- 字型隨著ProgressBar的載入而滾動
- 從聚合收款碼到智慧數字經營,讓數字化轉型變得輕而易舉
- Pulsar 2.0 新版變化
- 狀態變化模式模式
- 氣候變化2022:減緩氣候變化報告(2193頁)
- 時代在變化,也一直在擁抱變化
- 雖小但改變世界的變化"Hugme
- Python進階:如何將字串常量轉化為變數?Python字串變數
- 【轉】PMBOK2008版變化與備考應對
- 隨著能源行業的快速變化,物聯網的機會比比皆是,但面臨什麼風險?行業
- F5如何解鎖感知可控,隨需而變的應用?
- 隨著數字化深入,全景數字化網站才是未來網站
- 隨著 Zorin 15 的釋出,Zorin OS 變得更為強大
- vue 監聽路由變化Vue路由
- InnoDB LOCK檢視變化
- 鏈式變化動畫,,,,動畫
- 新的Lakehouse,遲來的資料正規化轉變
- 支援數字化轉型的5個變革管理技巧