状态模式

作者: zhangxiao | 来源:发表于2017-07-25 00:33 被阅读0次

    概述

    当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

    状态模式的实现

    通过状态模式来实现一个控制器,有登录和未登录两个状态和点赞、评论、转发三个功能。
    登录状态:提示点赞成功,提示评论成功,提示转发成功。
    未登录状态:提示点赞失败请登录,提示评论失败请登录,提示转发失败请登录
    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

    相关文章

      网友评论

        本文标题:状态模式

        本文链接:https://www.haomeiwen.com/subject/jfiuhxtx.html