对象方便地包装了行为(behavior)与状态(state):前者被暴露给外部世界,后者则为前者提供支持。对象的好处之一就是将程序中的所有状态分割成小块,每一块都有属于自己的计算环境。这样每一块状态的改变都在可控范围内,编写程序其实就是在改变每一个对象的状态,通过对象状态的转变达到我们要实现的目的。如何访问与修改状态是必须要面对的问题。
1. 直接访问
比如: x = 10 这种访问方式好处是表达清晰,一眼就能看出x到了什么状态。但这是以损失灵活性为代价的,如果在多个地方需要对同一变量赋值,那么当赋的值需要修改就得同时修改多个地方。另外还有一个缺点:这种操作属于实现细节,其层面低于编程时通常的思考层面。比如说:上面我把x=10的目的是要打开车库的大门,我们应该这样做:openDoor(); 利用一个方法来表达我们的意图。编程时通常的思考层面与存储无关,如果程序中到处都是直接访问变量,就会给沟通带来障碍。(编程的时候,应该尽量为阅读者扫清障碍,先告诉阅读者一个大概的轮廓,如果想具体了解细节,他可以到更细的类或者方法中去查看。)
2. 间接访问
间接访问就是用方法调来对状态进行访问与修改,这种访问方式带来更好的灵活性。用访问器封装状态之后,使用者就无法获知某一个值是否直接被存储,因此你也可以改变存储方式,而不会对使用者代码造成什么影响。
什么时候直接访问,什么时候该间接访问呢?默认的策略是:允许在类(及其内部类)中直接访问,其他的使用者必须间接访问。
3. 及早初始化
一旦变量出现(变量声明或者变量所指的对象创建的时候)就立即初始化。及早初始化的好处在于,可以保证变量在使用之前一定是被初始化过的。比如在声明的时候初始化和在构造函数中初始化。
为了美观,最好在同一地方初始化所有的字段。
4. 延迟初始化
假如在初始化的一个值的时候成本很高,初始化之后又不一定会用,那么可以延迟到使用它的时候再进行初始化。比如创建一个getter方法,如果对象为空,则初始化。
分享到:
相关推荐
在Java中实现状态模式,我们通常会定义以下几个核心组件: 1. **状态接口(State Interface)**:这是所有具体状态类的抽象,它定义了一组操作,这些操作与对象的行为相关,这些行为可能因状态变化而变化。例如: ...
在Java中,状态模式通常通过实现接口或者继承抽象类来实现状态的切换。 在实际生活中,一个典型的例子是自动贩卖机。自动贩卖机有多种状态,如等待投币、等待选择商品、等待出货和交易完成等。每种状态下,贩卖机的...
3. **具体状态类**(Concrete State):实现了状态接口,每种具体状态类对应对象的一种行为模式。当状态上下文中的状态改变时,会切换到不同的具体状态对象,从而执行不同的行为。 在C#实现中,我们可能会创建一个`...
以下是一个简单的状态模式实现示例: ```java // 状态接口 public interface State { void handle(); } // 具体状态A public class ConcreteStateA implements State { @Override public void handle() { ...
在Java中,状态模式通常通过定义不同的状态类和一个上下文类来实现,其中上下文类持有状态对象并调用其方法来响应外部请求。 ## 一、模式介绍 状态模式的核心是将对象的行为与其当前状态关联起来。当对象的状态...
Java 设计模式之策略模式与状态模式 策略模式是 Java 中的一种设计模式,它主要用于解决系统与第三方接口进行数据交互的问题。当系统需要与多种格式的数据进行交互时,使用策略模式可以很好地解决这个问题。例如,...
在这个Java实现的"设计模式之状态模式实例"中,我们可以通过运行`StatePatternDemo`来观察状态模式的实际效果,演示如何在不同状态下,自动售货机如何响应用户操作。这个例子将帮助我们更好地理解和运用状态模式,...
在这个实现中,首先定义了一个抽象状态类或接口,比如`State`,它定义了所有可能的状态以及与之相关的操作。每个具体状态类(如`OrderPendingState`、`OrderPaidState`、`OrderShippedState`)都实现了`State`接口,...
在实现状态模式时,通常会有一个状态切换的机制,例如在环境类中有一个方法用于根据条件切换到不同的状态。例如: ```java public class Context { private State currentState; public Context(State initial...
状态模式是一种行为设计模式,它使你能在运行时改变对象的行为。在TCP连接中,状态模式的...`StateTest`文件可能是对这一概念的实践验证,通过编写和运行测试用例,我们可以确保状态模式在TCP连接管理中的正确实现。
3. ConcreteStateA、ConcreteStateB(具体状态类):这些类是状态模式的核心,每个类代表一种具体的状态,它们分别实现了State接口或抽象类中的方法,提供了对应状态下的行为。 三、使用场景 状态模式适用于以下...
下面是一个简单的状态模式实现示例: 1. 定义一个抽象状态类或接口,例如 `State`: ```java public abstract class State { public abstract void handle(Context context); } ``` 2. 创建具体状态类,例如 `...
在状态模式下,每种状态都是一个独立的类,它们实现了自动贩卖机在不同状态下的行为。当自动贩卖机的状态发生变化时(如用户投币或选择商品),上下文会调用相应状态对象的方法来执行对应的操作。 在给定的压缩包...
在实现状态模式时,通常会有一个上下文类(Context),它维护一个当前状态对象,并通过这个对象调用相应的行为。而状态类(State)定义了一组相关状态的行为,每个具体状态类实现这些行为。 总结来说,责任链模式...
在C#中,状态模式的实现通常涉及以下组件: 1. **Context(环境)**:这是使用状态模式的类,它定义了与对象业务逻辑相关的接口,并且可以包含一个或多个对State对象的引用。在C#中,Context通常表现为一个类,拥有...
在Python中实现状态模式可以提供一种灵活的方式来处理对象在不同状态下表现出的不同行为,而无需创建大量的条件分支或嵌套if语句。 在Python中,状态模式通常包括以下几个关键组件: 1. **环境类(Context)**:...
### 设计模式之状态模式详解 #### 一、设计模式概述 设计模式是软件工程领域的一种最佳实践,它提供了一套解决特定问题的通用方案。根据功能的不同,设计模式大致可以分为三大类:创建型模式、结构型模式以及行为型...
通过使用状态模式,审批流程的实现变得更加清晰,每个状态及其行为被封装在独立的类中,使得添加新的审批步骤或修改现有状态的行为变得简单。此外,状态模式还有助于减少条件语句,提高代码的可读性和可维护性。 ...
在本例中,通过实现状态模式,可以清晰地将饮料机的不同状态行为封装在不同的状态类中,使得每个状态下的行为更加清晰且易于管理。同时,也使得系统的扩展性和可维护性得到提升。当需要增加新的状态时,只需要新增一...
最近在一个项目中用到了状态模式的相关知识,就...该资源包含了状态模式的一个总结,同时还有两个实例的实现,分别是大小写状态转换和一个有四个状态的状态图的例子的实现 大家可以导入直接阅读和运行代码,帮助学习