狀態模式

概述

當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。

狀態模式的實現

通過狀態模式來實現一個控制器,有登錄和未登錄兩個狀態和點贊、評論、轉發三個功能。
登錄狀態:提示點贊成功,提示評論成功,提示轉發成功。
未登錄狀態:提示點贊失敗請登錄,提示評論失敗請登錄,提示轉發失敗請登錄
1.定義一個狀態接口

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

2.定義一個控制接口

public interface IController {
    void upvote();

    void comment();

    void share();
}

3.實現一個登錄狀態的控制器


public class LoginController implements IController{

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

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

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

4.實現一個未登錄狀態的控制器


public class LogoutController implements IController{

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

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

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

}

5.實現控制器

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();//未登錄狀態
        System.out.println("**************未登錄************");
        mController.upvote();
        mController.comment();
        mController.share();
        mController.login();//登錄狀態
        System.out.println("**************已登錄************");
        mController.upvote();
        mController.comment();
        mController.share();
    }
}

打印結果:

image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容