Python 官方文档:入门教程 => 点击学习
目录一.介绍二.UML类图三.示意代码四.使用场景五.状态模式与策略模式对比六.优点一.介绍 状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式
状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式过于复杂时,把相关判断逻辑提取出来,用各个不同的状态类进行表示,系统处于哪种状态,直接使用相应的状态类对象进行处理,从而消除if/else、switch/case语句
定义了多个状态,每个状态类仅实现自己的逻辑,由环境类负责切换状态
业务代码
//环境类
public class Car {
private CarState carState;
public Car(CarState carState) {
this.carState = carState;
}
public void setCarState(CarState carState) {
this.carState = carState;
}
public void openDoor(){
carState.openDoor();
}
public void closeDoor(){
carState.closeDoor();
}
public void runCar(){
carState.runCar();
}
}
//抽象状态类
abstract class CarState{
public abstract void openDoor();
public abstract void closeDoor();
public abstract void runCar();
}
//具体状态类
class OpenState extends CarState{
@Override
public void openDoor() {
System.out.println("can not open the door");
}
@Override
public void closeDoor() {
System.out.println("close the door success");
}
@Override
public void runCar() {
System.out.println("can not run the car");
}
}
//具体状态类
class CloseState extends CarState{
@Override
public void openDoor() {
System.out.println("open the door success");
}
@Override
public void closeDoor() {
System.out.println("can not close the door");
}
@Override
public void runCar() {
System.out.println("run the car success");
}
}
客户端
public class Client {
public static void main(String[] args) {
CarState state = new CloseState();
Car car = new Car(state);
car.openDoor();
car.setCarState(new OpenState());
car.runCar();
}
}
状态模式与策略模式的UML类图几乎相同,因此比较一下两者的差异
状态模式状态之间可以存在互相依赖的关系状态之间互相转换,可以反复 策略模式多种算法行为选择一个就能满足算法之间彼此独立
减少多重条件判断(使用状态模式可以避免多重条件判断)符合开闭原则(结合工厂模式,生成状态的具体子类对象)状态之间可以自由转换符合单一职责原则(将不同状态的行为分隔开)
到此这篇关于浅析Java语言中状态模式的优点的文章就介绍到这了,更多相关Java状态模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 浅析Java语言中状态模式的优点
本文链接: https://www.lsjlt.com/news/196444.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0