java - 关于状态的 OO 编程
问题描述
这是我教授的oo编程作业。但是我发现婚姻状况可以是Person类中的一个变量,如何通过两个类来实现呢?
假设人们可以有婚姻状况:单身、已婚、寡妇、离婚。创建处理人们婚姻状况的状态OODP(即Java、JavaScript、C++、Python 或Ruby)。您将至少有两个类:Person 和 Marital State。确保遵循以下规则:单身->已婚已婚->离婚| 寡妇离婚-> 已婚寡妇-> 已婚创建一个客户端类来测试您的程序。确保您测试婚姻状况的有效和无效变化。
任务页面
这些是我的代码:
public class AssignmentOOP {
public static void main(String[] args) {
Person p1 = new Person("p1");
Person p2 = new Person("p2");
Person p3 = new Person("p3");
p1.PrintMaritalStatus();
p2.PrintMaritalStatus();
p3.PrintMaritalStatus();
p1.GetMarried(p2);
p1.GetMarried(p3);
p2.Died();
p1.GetMarried(p3);
}
}
class Person {
String maritalstatus;
boolean mateIsAlive;
Person mate;
String name;
Person(String name1) {
maritalstatus = "single";
mate = null;
name = name1;
}
void GetMarried(Person mate) {
if(this.maritalstatus.equals("married")|| mate.maritalstatus.equals("married"))
{
System.out.println("Marital status error! At least one of you are married");
return;
} else {
this.maritalstatus = "married";
this.mate = mate;
mate.maritalstatus = "married";
mate.mate = this;
System.out.println("Congratulations!!! " + this.name + " and " + mate.name + " are married!");
}
}
void GetDivorced(Person mate) {
if(this.maritalstatus.equals("married") && this.mate == mate) {
maritalstatus = "divorced";
System.out.println(this.name+" and "+mate.name+" are getting divorced.");
}else if(this.maritalstatus.equals("single")) {
System.out.println("You are not married and you cannot get divorced before getting married");
}else if(maritalstatus.equals("widow")) {
System.out.println("Your marital status is widow, you cannot get divorced.");
}
}
void Died() {
this.maritalstatus = "dead";
this.mate.maritalstatus = "widow";
System.out.println("Sorry for your loss, " + this.mate.name + " marital status is widow.");
}
void PrintMaritalStatus() {
System.out.println(this.name + " marital status is " + this.maritalstatus);
}
}
解决方案
这里:
String maritalstatus;
这可能不是你的教授想要的。婚姻状况的重点是:只有一组固定的价值观。
表达这一点的正确方法是在 java中使用枚举,例如:
public enum MaritalStatus { SINGLE, MARRIED, ... }
然后,您可以通过创建一个执行规则的状态机来进一步增强这一点,例如:当您是单身时,并且doMarry()
您的新身份之后应该是 MARRIED。
推荐阅读
- java - 使用 Java 8 从嵌套列表中获取多个映射值
- raku - 我可以一次绑定多个变量吗?
- python - matplotlib show() 在第二次调用中不显示()
- excel - VBA 循环通过可见单元格
- javascript - 使用坐标对象对 2 个数组进行排序,以获得彼此最接近的列表
- python-3.x - 方法 __int__ 的签名与类中基方法的签名不匹配 此检查检测覆盖方法签名中的不一致
- numpy - 意外的输入数据类型。实际:(tensor(double)),预期:(tensor(float))
- c# - 将 Elsa 工作流程与防伪令牌一起使用
- python - 逐行比较二维数组
- javascript - 模板文字的默认“标签”函数是什么?