freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計算機軟件及應(yīng)用]設(shè)計模式-文庫吧

2025-01-01 07:20 本頁面


【正文】 ontext/param public override void Handle(Context context) { (當(dāng)前狀態(tài)是 A.)。 = new ConcreteStateB()。 } } public class ConcreteStateB : State { /// summary /// 設(shè)置ConcreteStateB的下一個狀態(tài)是ConcreteSateA /// /summary /// param name=context/param public override void Handle(Context context) { (當(dāng)前狀態(tài)是 B.)。 = new ConcreteStateA()。 } }   客戶端調(diào)用 class Program { static void Main(string[] args) { // 設(shè)置Context的初始狀態(tài)為ConcreteStateA Context context = new Context(new ConcreteStateA())。 // 不斷地進(jìn)行請求,同時更改狀態(tài) ()。 ()。 ()。 ()。 ()。 } }  運行結(jié)果  5. 模式總結(jié)   優(yōu)點     狀態(tài)模式將與特定狀態(tài)相關(guān)的行為局部化,并且將不同狀態(tài)的行為分割開來?!   ?所有狀態(tài)相關(guān)的代碼都存在于某個ConcereteState中,所以通過定義新的子類很容易地增加新的狀態(tài)和轉(zhuǎn)換。    狀態(tài)模式通過把各種狀態(tài)轉(zhuǎn)移邏輯分不到State的子類之間,來減少相互間的依賴?! ?缺點     導(dǎo)致較多的ConcreteState子類   適用場景     當(dāng)一個對象的行為取決于它的狀態(tài),并且它必須在運行時刻根據(jù)狀態(tài)改變它的行為時,就可以考慮使用狀態(tài)模式來。     一個操作中含有龐大的分支結(jié)構(gòu),并且這些分支決定于對象的狀態(tài)。6. 應(yīng)用舉例:電燈有兩個狀態(tài),開(亮)與關(guān)(不亮),下面就用狀態(tài)模式來實現(xiàn)對電燈的控制。   類圖     實現(xiàn)代碼 /// summary /// 電燈類,對應(yīng)模式中的Context類 /// /summary public class Light { private LightState state。 public Light(LightState state) { = state。 } /// summary /// 按下電燈開關(guān) /// /summary public void PressSwich() { (this)。 } public LightState State { get { return state。 } set { state = value。 } } } /// summary /// 抽象的電燈狀態(tài)類,相當(dāng)于State類 /// /summary public abstract class LightState { public abstract void PressSwich(Light light)。 } /// summary /// 具體狀態(tài)類, 開 /// /summary public class On : LightState { /// summary /// 在開狀態(tài)下,按下開關(guān)則切換到關(guān)的狀態(tài)。 /// /summary /// param name=light/param public override void PressSwich(Light light) { (Turn off the light.)。 = new Off()。 } } /// summary /// 具體狀態(tài)類,關(guān) /// /summary public class Off: LightState { /// summary /// 在關(guān)狀態(tài)下,按下開關(guān)則打開電燈。 /// /summary /// param name=light/param public override void PressSwich(Light light) { (Turn on the light.)。 = new On()。 } }   客戶端代碼 class Program { static void Main(string[] args) { // 初始化電燈,原始狀態(tài)為關(guān) Light light = new Light(new Off())。 // 第一次按下開關(guān),打開電燈 ()。 // 第二次按下開關(guān),關(guān)閉電燈 ()。 ()。 } }  執(zhí)行結(jié)果   觀察者模式1. 概述  有時被稱作發(fā)布/訂閱模式,觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。2. 解決的問題  將一個系統(tǒng)分割成一個一些類相互協(xié)作的類有一個不好的副作用,那就是需要維護相關(guān)對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴展和重用都帶來不便。觀察者就是解決這類的耦合關(guān)系的。3. 模式中的角色   抽象主題(Subject):它把所有觀察者對象的引用保存到一個聚集里,每個主題都可以有任何數(shù)量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者對象?! ?具體主題(ConcreteSubject):將有關(guān)狀態(tài)存入具體觀察者對象;在具體主題內(nèi)部狀態(tài)改變時,給所有登記過的觀察者發(fā)出通知?! ?抽象觀察者(Observer):為所有的具體觀察者定義一個接口,在得到主題通知時更新自己?! ?具體觀察者(ConcreteObserver):實現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題狀態(tài)協(xié)調(diào)。4. 模式解讀  觀察者模式的類圖      觀察者模式的代碼 /// summary /// 抽象主題類 /// /summary public abstract class Subject { private IListObserver observers = new ListObserver()。 /// summary /// 增加觀察者 /// /summary /// param name=observer/param public void Attach(Observer observer) { (observer)。 } /// summary /// 移除觀察者 /// /summary /// param name=observer/param public void Detach(Observer observer) { (observer)。 } /// summary /// 向觀察者(們)發(fā)出通知 /// /summary public void Notify() { foreach (Observer o in observers) { ()。 } } } /// summary /// 抽象觀察者類,為所有具體觀察者定義一個接口,在得到通知時更新自己 /// /summary public abstract class Observer { public abstract void Update()。 } /// summary /// 具體觀察者或具體通知者,將有關(guān)狀態(tài)存入具體觀察者對象;在具體主題的內(nèi)部狀態(tài)改變時,給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個具體子類實現(xiàn)。 /// /summary public class ConcreteSubject : Subject { private string subjectState。 /// summary /// 具體觀察者的狀態(tài) /// /summary public string SubjectState { get { return subjectState。 } set { subjectState = value。 } } } /// summary /// 具體觀察者,實現(xiàn)抽象觀察者角色所要求的更新接口,已是本身狀態(tài)與主題狀態(tài)相協(xié)調(diào) /// /summary public class ConcreteObserver : Observer { private string observerState。 private string name。 private ConcreteSubject subject。 /// summary /// 具體觀察者用一個具體主題來實現(xiàn) /// /summary public ConcreteSubject Subject { get { return subject。 } set { subject = value。 } } public ConcreteObserver(ConcreteSubject subject, string name) { = subject。 = name。 } /// summary /// 實現(xiàn)抽象觀察者中的更新操作 /// /summary public override void Update() { observerState = 。 (The observer39。s state of {0} is {1}, name, observerState)。 } }  客戶端代碼 class Program { static void Main(string[] args) { // 具體主題角色通常用具體自來來實現(xiàn) ConcreteSubject subject = new ConcreteSubject()。 (new ConcreteObserver(subject, Ob
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1