zoukankan      html  css  js  c++  java
  • java实现23种设计模式之状态模式

    状态模式(State Pattern)中,类的行为是基于它的状态改变的。

    例如QQ的隐藏在线功能。使用场景可用于

     1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。

    通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。

    而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。

    也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。

    package com.ceshi19;
    
    public class State {
         private String value;
            
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        public void hide(){
            System.out.println("我是隐藏的!");
        }
        
        public void online(){
            System.out.println("我是在线的!");
        }
    }
    package com.ceshi19;
    
    public class Context {
    
        private State state;
    
        public Context(State state) {
            this.state = state;
        }
    
        public State getState() {
            return state;
        }
    
        public void setState(State state) {
            this.state = state;
        }
    
        public void method() {
            if (state.getValue().equals("hide")) {
                state.hide();
            } else if (state.getValue().equals("online")) {
                state.online();
            }
        }
    }
    package com.ceshi19;
    
    public class Test {
    
        public static void main(String[] args) {
            
            State state = new State();
            Context context = new Context(state);
            
            //设置第一种状态
            state.setValue("hide");
            context.method();
            
            //设置第二种状态
            state.setValue("online");
            context.method();
        }
    }

    做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等

  • 相关阅读:
    最通俗易懂的技术解读
    laya学习查漏补缺
    vue+webpack实现懒加载的三种方式
    web安全防范策略
    http/1.x、http/2与https的区别、以及http3
    设备检测
    移动端调试利器------微信开源项目
    SqlConnection 在linux 连接 mssql 挂起的问题。
    rabbitmq 启用日志跟踪
    使用脚本把.net core 程序部署到 docker 容器中
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756790.html
Copyright © 2011-2022 走看看