设计模式之State模式(笔记)

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

状态模式主要是解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

首先定义一个IState接口

public interface IState {

    public void handle(Context context);
}

接着定义具体的状态类,继承IState接口

public class ConcreteStateA implements IState{

    @Override
    public void handle(Context context) {
        context.setState(new ConcreteStateB());
    }

}

public class ConcreteStateB implements IState{

    @Override
    public void handle(Context context) {
        context.setState(new ConcreteStateA());
    }

}

然后定义Context类

public class Context {

    private IState state;

    public Context(IState state){
        this.state=state;
    }

    //可读写的状态属性,用来设置新状态
    public void setState(IState state){
        this.state=state;
        System.out.println(state.getClass().getName());
    }
    //获取当前状态
    public IState getState(){
        return state;
    }

    public void request(){
        state.handle(this);
    }

}

客户端代码

public static void main(String[] args) {
        IState state=new ConcreteStateA();
        Context context=new Context(state);
        context.request();
        context.request();
        context.request();
        context.request();
}
时间: 2024-10-11 23:38:32

设计模式之State模式(笔记)的相关文章

设计模式之State模式

State模式定义: 允许一个对象在状态改变是,改变它的行为.看起来对象似乎修改了它的类. 模式理解(个人): State模式主要解决的事在开发中时常遇到的根据不同状态需要进行不同的处理操作的问题,而这样的问题,大部分人会采用switch-case语句进行处理,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候,进行处理然后在切换到另一种状态.也就是说,把状态的切换责任交给了具体的状态

Android与设计模式——状态(State)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样. 状态模式的结构 用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类.状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变.状态模式的

C++设计模式之State模式

这里有两个例子: 1.https://www.cnblogs.com/wanggary/archive/2011/04/21/2024117.html 2.https://www.cnblogs.com/jiese/p/3182342.html 关于此设计模式,有几点概括: Context类包含抽象的State *_state成员变量,Context类声明为State类的frend(State至少会调用Context类的ChangeState函数). State是在维护一个状态,这里涉及到一个关

[设计模式]State模式

<Java与模式> 又称状态对象模式.状态模式是对象的行为模式.GOF95 一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态.这样的对象叫做有状态的对象(stateful). 状态模式把一个所研究的对象的行为包装在不同的状态对象中,每一个状态对象都属于一个抽象状态的一个子类. 状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变. 模式所涉及的对象包括: 1. 抽象状态角色,state,定义一个接口,用以封装环境,context对象的一个特定的状态所对应的行为.

设计模式之Composite模式(笔记)

组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户能够忽略组合对象与单个对象的不同,统一地使用组合结构中的全部对象时,就应该考虑用组合模式. 首先定义一个Componet抽象类 public abstract class Component { protected String name; public Component(String name){ thi

设计模式:state模式

核心: 把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化 例子: class State //状态接口 { public: virtual void show() = 0; }; class NormalState: public State //正常状态 { public: virtual void show() { cout << "Normal state, communicate success." << endl; } };

设计模式之代理模式笔记

原文地址:点我 关键点: 静态代理: 实现被代理类的接口 构造注入 动态代理 reflect  高级码农必须深入理解的 扩展知识点 class.forname 使用这个不会产生新的实例, 只是为了加载 链接 初始化(静态) 我们大家一直用的spring 其中强大的功能aop就是基于这 注意点: 动态代理有个强制性要求 被代理的类必须时间了某一个接口, 或者本身就是接口(这个接口的实现类非必要) 三步骤 构造注入 实现invoke 获取代理实例 参数 类加载器 class对象的数组 当前对象 接口

设计模式---装饰者模式(学习笔记)

首先看装饰者模式的定义:动态的将责任附加到对象上.若要扩展功 能,装饰者提供了比继承更有弹性的替代方案! 先看看<大话设计模式>给出的类图: 实际上,装饰者模式就是:把装饰者对象当成"包装者",换言之,把要装饰的对象作为参数传递到装饰对象里去,然后进行操作.(如果理解不对,希望给指正),下面看代码来理解这个类图: 这是装饰者和需要装饰的具体对象共同的接口: public abstract class Component { abstract void Operation()

C++设计模式 之 “状态变化” 模式:State、Memento

“状态变化”模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案. 典型模式 # state # memento Part 1 State 状态模式 动机 #在软件构建过程中,某些对象的状态如果改变,其行为也会随之而变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同. #如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合? #避免代码