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

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

  • 相关阅读:
    error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?
    linux命令awk的详解
    Ubuntu 能PING IP但不能PING主机域名的解决方法
    从github checkout子文件夹
    zuul简单使用
    docker for windows 10 添加阿里云镜像仓库无效问题
    Spring Boot 进行Bean Validate和Method Validate
    JVM调优-GC参数
    Spring Aop: 关于继承和execution target this @annotation
    ReentrantLock原理
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756790.html
Copyright © 2011-2022 走看看