design pattern 狀態模式

2021-09-01 09:36:04 字數 1934 閱讀 2085

針對問題:有時候乙個方法可能有很多if..else來判斷狀態後再執行相關操作,當很多方法都重複的出現這樣的if..else判斷時,就可以考慮用狀態模式了。

狀態模式的結構圖和策略模式一樣,事實上狀態模式和策略很相似,不同的是狀態模式除了委託狀態外,狀態實體自身持有主實體物件的引用,在狀態實體內部可以動態的改變主實體的狀態。

狀態模式結構圖:

狀態模式實現**:

/**

* 狀態介面

* @author bruce

* */

public inte***ce state

/** * 有錢狀態

* @author bruce

* */

public class hasquarterstate implements state

public void dispense()

public void ejectquarter()

public void insertquarter()

public void turncrank()

}/**

* 沒錢狀態

* @author bruce

* */

public class noquarterstate implements state

public void dispense()

public void ejectquarter()

public void insertquarter()

public void turncrank()

}/**

* 售出狀態

* @author bruce

* */

public class soldstate implements state

public void dispense() else

} public void ejectquarter()

public void insertquarter()

public void turncrank()

}/**

* 賣完狀態

* @author bruce

* */

public class soldoutstate implements state

public void dispense()

public void ejectquarter()

public void insertquarter()

public void turncrank()

}/**

* 糖果機

* @author bruce

* */

public class gumballmachine }

public void insertquarter()

public void ejectquarter()

public void turncrank()

void setstate(state state)

void releaseball()

} public state getsoldoutstate()

public state getnoquarterstate()

public state gethasquarterstate()

public state getsoldstate()

public state getstate()

public int getcount()

}/**

* 測試

* @author bruce

* */

public class client

}

Design Pattern 工廠模式

當有一些要例項化的具體類,究竟例項化哪個類,要在執行時由一些條件來決定。當 使用大量具體類時,我們就要考慮使用工廠模式了。定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。public abstract class pizzastore protected ...

design pattern 外觀模式

針對問題 在軟體開發系統中,客戶程式經常會與複雜系統的內部子系統之間產生耦合,而導致客戶程式隨著子系統的變化而變化。那麼如何簡化客戶程式與子系統之間的互動介面?如何將複雜系統的內部子系統與客戶程式之間的依賴解耦?為子系統中的一組介面提供乙個一致的介面,facade 模式定義了乙個高層介面,這個介面使...

Design Pattern 裝飾模式

動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。對於物件功能的擴充套件,物件導向一般通過繼承來解決,但這種方式缺乏靈活性,而且隨意定義子類容易導致類層次結構過快膨脹.場景,當類的核心職責和主要行為沒有發生變化,僅僅需要動態對類物件新增一些裝飾性的功能,...