首页 > 解决方案 > 关于状态的 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);
    }
}

标签: javaoopdesign-patternsobject-oriented-analysis

解决方案


这里:

String maritalstatus;

这可能不是你的教授想要的。婚姻状况的重点是:只有一组固定的价值观。

表达这一点的正确方法是在 java中使用枚举,例如:

public enum MaritalStatus { SINGLE, MARRIED, ... } 

然后,您可以通过创建一个执行规则的状态机来进一步增强这一点,例如:当您是单身时,并且doMarry()您的新身份之后应该是 MARRIED。


推荐阅读