我使用的是状态模式,我需要知道给定对象的打印状态.我考虑过使用一个抽象方法返回一个字符串,每个州都会用自己的名字覆盖它,这是一个可接受的解决方案吗?

public abstract class State{

    public abstract String getState();

}

class StateOne extends State{

    @Override
    public String getState(){ return "StateOne"; }

}

// And so on for each state...

推荐答案

看起来你有is "is a"关系,所以把抽象方法getState()放到抽象类中是可以的:

public abstract class State{

    public abstract String getState();

}

抽象类应该包含所有派生类的行为.getState()方法计划在所有派生类中使用.此外,getState()方法与State类具有很高的内聚性.所以这就是使用继承的情况.

Read more when to prefer inheritance or composition.

Java相关问答推荐

如何计算内循环的时间复杂度?

Java应用程序崩溃时试图读取联系人从电话

JavaFX Maven Assembly插件一直打包到错误的JDK版本

安装Java Jar应用程序的Install4j遇到ClassNotFoundException的运行时错误

解释左移在Java中的工作原理

使用Jolt将字段转换为列表

尽管通过中断请求线程死亡,但线程仍将继续存在

WebSockets和Spring Boot安全性出现错误401

在执行流和相关操作时,使用Java泛型为2个方法执行相同的操作,但对象不同

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

如何使用log4j2(Json)记录由";异常引起的所有";?

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

垃圾回收器是否真的删除超出作用域的对象?

无法播放音频:从资源加载库GStreamer-Lite失败

对从Spring Boot 3.1.5升级到3.2.0的方法的查询验证失败

在Oracle中调用输出参数在索引处缺少IN或OUT参数的函数

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

PhantomReference无法访问时会发生什么?

URI构造函数错误?

Spring Boot应用程序中的自定义constraintvalidator不会被调用