狀態(tài)模式

概述

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

狀態(tài)模式的實(shí)現(xiàn)

通過狀態(tài)模式來實(shí)現(xiàn)一個(gè)控制器,有登錄和未登錄兩個(gè)狀態(tài)和點(diǎn)贊、評論、轉(zhuǎn)發(fā)三個(gè)功能。
登錄狀態(tài):提示點(diǎn)贊成功,提示評論成功,提示轉(zhuǎn)發(fā)成功。
未登錄狀態(tài):提示點(diǎn)贊失敗請登錄,提示評論失敗請登錄,提示轉(zhuǎn)發(fā)失敗請登錄
1.定義一個(gè)狀態(tài)接口

public interface IState {
    void login();
    void logout();
}

2.定義一個(gè)控制接口

public interface IController {
    void upvote();

    void comment();

    void share();
}

3.實(shí)現(xiàn)一個(gè)登錄狀態(tài)的控制器


public class LoginController implements IController{

    @Override
    public void upvote() {
        System.out.println("點(diǎn)贊成功");
    }

    @Override
    public void comment() {
        System.out.println("評論成功");
    }

    @Override
    public void share() {
        System.out.println("分享成功");
    }
}

4.實(shí)現(xiàn)一個(gè)未登錄狀態(tài)的控制器


public class LogoutController implements IController{

    @Override
    public void upvote() {
        System.out.println("點(diǎn)贊失敗,請登錄");
    }

    @Override
    public void comment() {
        System.out.println("評論失敗,請登錄");
    }

    @Override
    public void share() {
        System.out.println("分享失敗,請登錄");
    }

}

5.實(shí)現(xiàn)控制器

public class Controller implements IController, IState {
    
    private IController mController;

    public void setController(IController controller) {
        mController = controller;
    }

    @Override
    public void upvote() {
        mController.upvote();
    }

    @Override
    public void comment() {
        mController.comment();
    }

    @Override
    public void share() {
        mController.share();
    }

    @Override
    public void login() {
        setController(new LoginController());
    }

    @Override
    public void logout() {
        setController(new LogoutController());
    }

}

6.測試類

public class Client {
    public static void main(String[] args) {
        Controller mController=new Controller();
        mController.logout();//未登錄狀態(tài)
        System.out.println("**************未登錄************");
        mController.upvote();
        mController.comment();
        mController.share();
        mController.login();//登錄狀態(tài)
        System.out.println("**************已登錄************");
        mController.upvote();
        mController.comment();
        mController.share();
    }
}

打印結(jié)果:

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

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

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