状态是行为设计??模式之一當Object根据其内部状态更改其行为时,将使用状态设计模式
如果我们必须根据对象的状态更改对象的行为,我们可以在Object中有一个状态变量嘫后使用if-else条件块根据状态执行不同的操作。状态设计模式用于提供系统的和松散耦合的方式来实现这一点Context
和State
实现
状态模式上下文是具有State引用的一个类的具体实现。Context将请求转发给状态对象进行处理让我们用一个简单的例子来理解这一点。
假设我们想用一个简单的按钮来实現TV Remote以执行操作。如果状态为ON它将打开电视,如果状态为OFF它将关闭电视。
我们可以使用if-else条件来实现它如下所示;
请注意,客户端代码應该知道用于设置远程状态的特定值此外,如果状态数量增加那么实现和客户端代码之间的紧密耦合将非常难以维护和扩展。
现在我們将使用State模式来实现上面的TV Remote示例
首先,我们将创建State接口该接口将定义应由不同的具体状态和上下文类实现的方法。
状态设计模式 具体實现
在我们的示例中我们可以有两种状态 - 一种用于打开电视,另一种用于关闭电视因此,我们将为这些行为创建两个具体的状态实现
现在我们准备实现我们的Context对象,它将根据其内部状态改变其行为
状态设计模式上下文实现
请注意,Context还实现State并保留其当前状态的引用並将请求转发给状态实现。
现在让我们编写一个简单的程序来测试TV Remote的状态模式实现
上述程序的输出与TV Remote的基本实现相同,不使用状态模式
使用State模式实现多态行为的好处显而易见。错误的可能性较小并且很容易为其他行为添加更多状态。从而使我们的代码更加健壮易于維护和灵活。在这种情况下状态模式也有助于避免if-else或switch-case条件逻辑。
这就是java中的状态设计模式我希望你喜欢它。
}