摘要:狀態(tài)模式一狀態(tài)模式定義允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為這個(gè)對(duì)象看起來像是改變了其類二具體實(shí)現(xiàn)創(chuàng)建抽象狀態(tài)接口創(chuàng)建容器創(chuàng)建具體狀態(tài)類調(diào)用輸出三優(yōu)缺點(diǎn)優(yōu)點(diǎn)封裝了轉(zhuǎn)換規(guī)則擴(kuò)展性強(qiáng),易于添加新的狀態(tài)對(duì)象或行為缺點(diǎn)狀態(tài)過多導(dǎo)致類膨脹四源碼
狀態(tài)模式
一. 狀態(tài)模式 1.1 定義允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為.這個(gè)對(duì)象看起來像是改變了其類.
二. 具體實(shí)現(xiàn) 2.1 創(chuàng)建抽象狀態(tài)接口public interface IState { void print(Context context); }2.2 創(chuàng)建容器
public class Context { private IState state; public Context(){ this.state = null; } public void setState(IState state){ this.state = state; System.out.println("setState : " + state.getClass().getSimpleName()); } public void print(){ state.print(this); } }2.3 創(chuàng)建具體狀態(tài)類
public class StateA implements IState { @Override public void print(Context context) { System.out.println("StateA print ..."); context.setState(new StateB()); } } public class StateB implements IState { @Override public void print(Context context) { System.out.println("StateB print ..."); context.setState(new StateA()); } }2.5 調(diào)用
public static void main(String[] args) { Context context = new Context(); context.setState(new StateA()); context.print(); context.print(); }2.6 輸出
setState : StateA StateA print ... setState : StateB StateB print ... setState : StateA三. 優(yōu)缺點(diǎn) 3.1 優(yōu)點(diǎn)
封裝了轉(zhuǎn)換規(guī)則.
擴(kuò)展性強(qiáng),易于添加新的狀態(tài)對(duì)象或行為.
3.2 缺點(diǎn)狀態(tài)過多導(dǎo)致類膨脹.
四. 源碼https://github.com/Seasons20/DisignPattern.git
END
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69727.html
摘要:要注意這里的一個(gè)狀態(tài)行為因?yàn)檫@個(gè)詞是狀態(tài)模式中最重要的個(gè)概念??紤]到這點(diǎn),聰明的在中推出了狀態(tài)機(jī)這個(gè)偽函數(shù),能夠幫助我們快速實(shí)現(xiàn)狀態(tài)化。這里就引入了狀態(tài)機(jī)這個(gè)概念,以及和他對(duì)應(yīng)的狀態(tài)表。 ?首先聲明一點(diǎn),這個(gè)模式是我目前見過最好用(本人觀點(diǎn)),但是也是最難理解的一個(gè)(本人觀點(diǎn))。 所以大家需要做好心理準(zhǔn)備,如果,對(duì)這個(gè)模式?jīng)]有特別強(qiáng)烈的需求,比如: 我有一個(gè)Button,我按次數(shù)點(diǎn)擊它...
摘要:狀態(tài)模式對(duì)于對(duì)象內(nèi)部的狀態(tài),允許其在不同的狀態(tài)下,擁有不同的行為,對(duì)狀態(tài)單獨(dú)封裝成類。通過什么來舉例子呢設(shè)計(jì)到多狀態(tài),不同狀態(tài)下各自具有不同行為的東西,而且理解起來相對(duì)容易的。下篇更新適配器模式 目錄 狀態(tài)模式 為什么使用狀態(tài)模式? 應(yīng)用實(shí)例 狀態(tài)模式 狀態(tài)模式,顧名思義,肯定是和狀態(tài)有關(guān),進(jìn)一步思考,我們?cè)谟懻摰氖窃O(shè)計(jì)模式,設(shè)計(jì)模式中的重要原則對(duì)變化的進(jìn)行封裝,順著這個(gè)思路去想,...
摘要:前言當(dāng)代碼中出現(xiàn)多重語句或者語句時(shí)。代替多重分支這個(gè)情況的代替方式是可以為晴天時(shí)處理邏輯下雨時(shí)處理邏輯陰天時(shí)處理邏輯策略模式使用策略模式可以代替多重和語句,讓代碼維護(hù)變得更加簡單。狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。 前言 當(dāng)代碼中出現(xiàn)多重if-else語句或者switch語句時(shí)。弊端之一:如果這樣的代碼出現(xiàn)在多處,那么一旦出現(xiàn)需求變更,就需要把所有地方的if-els...
摘要:什么是狀態(tài)模式狀態(tài)模式對(duì)象行為是基于狀態(tài)來改變的。原文地址設(shè)計(jì)模式手冊(cè)之狀態(tài)模式優(yōu)缺點(diǎn)優(yōu)點(diǎn)封裝了轉(zhuǎn)化規(guī)則,對(duì)于大量分支語句,可以考慮使用狀態(tài)類進(jìn)一步封裝。 1. 什么是狀態(tài)模式? 狀態(tài)模式:對(duì)象行為是基于狀態(tài)來改變的。 內(nèi)部的狀態(tài)轉(zhuǎn)化,導(dǎo)致了行為表現(xiàn)形式不同。所以,用戶在外面看起來,好像是修改了行為。 Webpack4系列教程(17篇) + 設(shè)計(jì)模式手冊(cè)(16篇):GitHub地址 博...
摘要:什么是狀態(tài)模式狀態(tài)模式對(duì)象行為是基于狀態(tài)來改變的。原文地址設(shè)計(jì)模式手冊(cè)之狀態(tài)模式優(yōu)缺點(diǎn)優(yōu)點(diǎn)封裝了轉(zhuǎn)化規(guī)則,對(duì)于大量分支語句,可以考慮使用狀態(tài)類進(jìn)一步封裝。 1. 什么是狀態(tài)模式? 狀態(tài)模式:對(duì)象行為是基于狀態(tài)來改變的。 內(nèi)部的狀態(tài)轉(zhuǎn)化,導(dǎo)致了行為表現(xiàn)形式不同。所以,用戶在外面看起來,好像是修改了行為。 Webpack4系列教程(17篇) + 設(shè)計(jì)模式手冊(cè)(16篇):GitHub地址 博...
閱讀 2184·2021-11-24 09:39
閱讀 2802·2021-07-29 13:49
閱讀 2328·2019-08-29 14:15
閱讀 2244·2019-08-29 12:40
閱讀 3324·2019-08-26 13:42
閱讀 643·2019-08-26 12:13
閱讀 2077·2019-08-26 11:41
閱讀 3355·2019-08-23 18:32