`

易学设计模式13 状态模式(State)

阅读更多
状态模式(State Pattern)是设计模式的一种,属于行为模式。
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
意图:允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。




public class Context {
	
	private State state;
	
	public void sampleOperation() {
		state.sampleOperation();
	}
	
	public void setState(State state) {
		this.state = state;
	}

}


public interface State {
	
	public void sampleOperation();

}


public class ConcreteState1 implements State {
	
	public void sampleOperation() {
		System.out.println("this is ConcreteState1");
	}

}


public class ConcreteState2 implements State {
	
	public void sampleOperation() {
		System.out.println("this is ConcreteState2");
	}

}


public class Client {

	public static void main(String[] args) {
		State s1 = new ConcreteState1();
		State s2 = new ConcreteState2();
		Context ctx = new Context();
		ctx.setState(s1);
		ctx.sampleOperation();
		ctx.setState(s2);
		ctx.sampleOperation();
	}
}


输出结果:

this is ConcreteState1
this is ConcreteState2
  • 大小: 56.3 KB
分享到:
评论

相关推荐

    易学设计模式源码光盘

    "易学设计模式源码光盘" 提供了一种直观的学习方式,帮助初学者更轻松地理解和应用这些模式。这里我们将深入探讨设计模式的核心理念、主要分类以及一些常见设计模式的实现细节。 首先,设计模式的出现源于对软件...

    [源代码] 《易学 设计模式》 随书源代码

    《易学 设计模式》 郭志学 编著 随书源代码 ☆ 章节清单:☆ 第01章 欲速则不达:了解设计模式 第02章 磨刀不误砍柴工:UML语言概述 第03章 术业有专攻:简单工厂模式 (SimpleFactory) 第04章 精益求精:工厂方法...

    java-易学设计模式

    "java-易学设计模式"这个压缩包很可能是包含了一些关于Java设计模式的示例源代码,方便学习者理解和掌握。 首先,我们来讨论一下设计模式的基本分类。设计模式分为三类:创建型模式、结构型模式和行为型模式。 1. ...

    设计模式例子文档,简单易学

    这份名为"设计模式例子文档,简单易学"的资源,显然是为了帮助开发者更直观、更快速地理解和应用设计模式。设计模式并非具体的代码或库,而是一种通用的解决方案模板,可以在不同的软件开发过程中复用,以提高代码的...

    Beedle是一个很小的库可以帮助您管理整个应用程序的状态

    `Beedle` 是一个轻量级的状态管理工具,它借鉴了`Redux`和`Vuex`的设计理念,为JavaScript应用程序提供了一种简单易用的状态管理模式。在现代Web开发中,状态管理对于构建复杂、可维护的应用程序至关重要,而`Beedle...

    基于vue、vuex、ElementUI的后台管理系统源码.zip

    7. **状态设计模式**:Vuex提倡使用状态设计模式,源码中会有对state、mutations、actions、getters的清晰划分,遵循单一状态树原则。 8. **单元测试和集成测试**:为了确保代码质量,项目可能包含测试脚本,使用如...

    9、ui框架以及vuex

    Vuex是专门为Vue.js应用程序开发的状态管理模式和存储库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在Vuex中,状态被保存在一个单一的store对象中,所有...

    基于Springboot+Vue校园资产管理源码案例设计.zip

    Vuex则是一个专为Vue.js应用程序开发的状态管理模式,集中管理组件共享状态,解决了组件间通信的复杂性。 七、部署与运行 项目通常被打包成jar文件,通过命令行启动。使用Docker容器化部署可以进一步提升部署的便捷...

    基于springboot+vue开发java国产动漫网站设计和实现附毕业论文+源代码+sql(毕业设计).rar

    9. **状态管理**: Vue.js中的Vuex是一个专为Vue.js应用程序开发的状态管理模式。它可以集中管理组件之间的共享状态,保持数据的一致性。 10. **安全机制**: SpringBoot提供了Spring Security模块,可实现用户认证和...

    asp.net课程设计

    5. **状态管理**:在Web环境中,由于其无状态性,ASP.NET提供了多种状态管理机制,如View State、Session、Cookie等,VB代码可以用来管理这些状态,保持用户会话信息。 6. **安全性**:包括身份验证、授权、防止跨...

    精品--Java商城网站系统设计与实现,基于java+springboot+vue开发的电子商城网站 - 毕业设计 .zip

    4. **MVC架构**: 项目很可能采用了Model-View-Controller(MVC)架构模式,这是一种常见的软件设计模式,用于分离应用程序的数据层、控制层和视图层,使得代码更加清晰和可维护。 5. **RESTful API**: 后端与前端...

    vue相关离线文档

    它以其简单易学、灵活和高效的设计而闻名。Vue.js 的核心库专注于视图层,易于整合到其他库或现有项目中。Vue Router 和 Vuex 分别是 Vue 生态系统中的路由管理和状态管理工具。 Vue Router 是 Vue.js 的官方路由库...

    thinking-in-swiftui&SwiftUI 与 Combine编程

    1. **设计模式**:介绍适用于SwiftUI的常见UI设计模式和架构策略。 2. **高级技巧**:涵盖一些进阶话题,如动态字体大小适配、自定义动画、手势识别等。 3. **性能优化**:讨论如何优化SwiftUI应用的性能,避免不必...

    前端必背面试宝典,总结89页的面试题

    :Vuex 是一个专门为 Vue.js 应用程序设计的状态管理模式。 * vuex的优点和缺点是什么?:优点:集中管理状态、缺点:增加了学习成本和开发复杂度。 * vuex的原理是什么?:使用单一状态树来管理应用程序的状态。 * ...

    Django+vue+前后端分离备忘录小项目.zip

    在这个"Django+vue+前后端分离备忘录小项目"中,我们主要涉及了三个关键技术:Django(一个Python开发的Web框架)、Vue.js(一个轻量级的前端JavaScript框架)以及前后端分离的设计模式。这个小项目可以作为学习这三...

    基于Vue和Vuex结合typescript的移动端项目模板,Vant组件库.zip

    Vuex提供了一个“store”模式,将应用的状态集中存储,并通过特定的API来管理和改变状态。这确保了状态的变更遵循一定的规则,增强了可预测性。同时,Vuex与Vue的生命周期紧密集成,使得组件可以轻松地订阅和响应...

    PG6301 Web 开发和 API 设计课程代码

    REST(Representational State Transfer)是一种常见的API设计风格,强调状态lessness和资源导向。设计良好的API应遵循HTTP协议,使用标准的HTTP方法(GET、POST、PUT、DELETE等),并返回JSON格式的数据。安全性和...

    毕业设计二手书在线交易系统后端.zip

    1. **Vue.js**:Vue.js是一个轻量级的前端JavaScript框架,它采用组件化开发模式,具有易学易用、高性能、灵活等特点。在本项目中,Vue.js负责用户界面的交互和动态数据渲染,提供友好的用户体验。开发者可以利用...

    基于内容的推荐算法,采取前后端分离,Springboot+Vue+ElementUI模式,本项目为后端.zip

    为了实现前后端的通信,后端通常会设计一组遵循REST(Representational State Transfer)原则的API。这些API通过HTTP方法(GET、POST、PUT、DELETE等)定义了资源的操作,使得前端能够通过URL地址和HTTP动词轻松地...

Global site tag (gtag.js) - Google Analytics