還為那些設(shè)計模式煩惱嗎-狀態(tài)模式

定義

當一個對象的內(nèi)在狀態(tài)改變時允許改變其行為,這個對象看起來像是改變了其類

public interface TvState {
    public void next();
    public void pre();
    public void up();
    public void down();
}
package com.qc.state;

public class PowerOffState implements TvState {

    @Override
    public void next() {
        // TODO Auto-generated method stub

    }

    @Override
    public void pre() {
        // TODO Auto-generated method stub

    }

    @Override
    public void up() {
        // TODO Auto-generated method stub

    }

    @Override
    public void down() {
        // TODO Auto-generated method stub

    }

}

package com.qc.state;

public class PowerOnState implements TvState {

    @Override
    public void next() {
        // TODO Auto-generated method stub
        System.out.println("下一首");
    }

    @Override
    public void pre() {
        // TODO Auto-generated method stub
        System.out.println("上一首");
    }

    @Override
    public void up() {
        // TODO Auto-generated method stub
        System.out.println("上");
    }

    @Override
    public void down() {
        // TODO Auto-generated method stub
        System.out.println("下");
    }

}
package com.qc.state;

public interface PowerController {
    public void powerOn();
    public void powerOff();
}

package com.qc.state;

public class Tv implements PowerController {
    TvState mTvState;

    @Override
    public void powerOn() {
        // TODO Auto-generated method stub
        setTvState(new PowerOnState());
    }

    @Override
    public void powerOff() {
        // TODO Auto-generated method stub
        setTvState(new PowerOffState());
    }

    public void setTvState(TvState mTvState) {
        this.mTvState = mTvState;
    }

    public void next() {
        mTvState.next();
    }

    public void pre() {
        mTvState.pre();
    }

    public void up() {
        mTvState.up();
    }

    public void down() {
        mTvState.down();
    }

}

package com.qc.state;

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Tv mTv = new Tv();
        mTv.powerOn();
        mTv.next();
        mTv.pre();
        mTv.up();
        mTv.down();
    }

}

使用

1、一個對象的行為取決于它的狀態(tài)。并且它必須在運行時根據(jù)狀態(tài)改變它的行為。
2、代碼中包含大量與對象狀態(tài)有關(guān)的條件語句,例如,一個操作中含有龐大的多分支語句(if-else或switch-case),且這些分支依賴于該對象的狀態(tài)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,533評論 0 13
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,543評論 1 44
  • [The Swift Programming Language 中文版]本頁包含內(nèi)容: Swift提供了多種流程控...
    風(fēng)林山火閱讀 680評論 0 0
  • 文/金剛葫蘆媽 最近一個很火的視頻,一個萌萌噠小男孩,大人問,“你長大了想成為什么樣的人???”他回答我想成為爸爸。...
    蘭菲閱讀 532評論 8 5
  • 我今天被清了,你也清清吧。不用回,試試吧,復(fù)制我發(fā)的信息,找到微信里的設(shè)置,通用,群發(fā)助手,全選,粘貼復(fù)制的信息發(fā)...
    長弓心悅閱讀 344評論 0 2

友情鏈接更多精彩內(nèi)容