隨著變化而變化(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
- android短視訊開發,設定APP字型大小不隨著系統變化而改變AndroidAPP
- 底部隨輸入法高度變化而變化的控制元件SoftLinearLayout控制元件
- iOS:導航條滾動透明度隨著tableView的滾動而變化iOSView
- 直播軟體搭建,狀態列顏色跟隨裝置系統變化而變化
- Hub Entertainment:研究顯示觀眾隨著他們的電視機發展而變化AI
- 監聽Dom節點變化 - Mutation ObserverServer
- 阿里CEO張勇:阿里的價值不會隨股價變化而改變阿里
- JavaScript 背景顏色隨機變化JavaScript隨機
- 字型隨瀏覽器縮放變化瀏覽器
- 跟著sleep看jvm執行緒變化JVM執行緒
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務...Vue變數
- vue總結:computed屬性實現監控變數變化,watch屬性監控變數變化從而實現其他業務Vue變數
- 華為後臺某應用商品展示價格幣種隨其他應用配置而變化
- Web技術持續演進,英特爾助力其隨變而變Web
- css實現高度height隨寬度width變化保持比例不變CSS
- excel排序怎麼讓後面的資料跟著動 excel設定B列跟隨A列變化Excel排序
- 神經網路語言模型中,詞向量為什麼可以隨著模型的迭代而改變?神經網路模型
- SAP S/4 HANA新變化-CO技術變化
- JDK 版本變化JDK
- 30 年內軟體技術的不變與變化 (轉)
- 變數含義,臨近變化變數
- 【轉載】AngularJS監聽路由變化AngularJS路由
- js字型顏色隨機變化效果程式碼例項JS隨機
- 字型隨著ProgressBar的載入而滾動
- 隨著能源行業的快速變化,物聯網的機會比比皆是,但面臨什麼風險?行業
- 站著程式設計兩年後我身體上的變化程式設計
- 狀態變化模式模式
- ThinkPHP 3.2 的變化PHP
- 在 Laravel 中將 PHP 變數轉化為 JavaScript 變數並輸出LaravelPHP變數JavaScript
- 隨著數字化深入,全景數字化網站才是未來網站
- Android的RadioButton隨著選中狀態的改變字型顏色也改變Android
- F5如何解鎖感知可控,隨需而變的應用?
- Java 如何監控檔案目錄的變化 【轉】Java
- 加強企業的變化管理系統(轉)
- 詳解Linux 2.6核心新變化(2)(轉)Linux
- 詳解Linux 2.6核心新變化(1)(轉)Linux
- 從思維轉變看數字化轉型 IT 經營