• 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();
        }
    }

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

  • 相关阅读:
    es6 数组的扩展
    面向对象的7大原则及其实例
    flex 布局
    一、创建vue
    箭头函数
    destructuring
    spreed&rest
    变量新声明之let、const
    jQuery之遍历索引相关方法
    jQuery之位置坐标图形相关方法
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756790.html
Copyright © 2020-2023  润新知