我遇到一个问题,要求创建一个对象,在本例中为 a ,每次我运行 eat 方法时,它都会打印出苹果,香蕉同伴,然后循环回苹果。
我很确定我需要创建3个类class apple
class banana
class peer
,每个类都继承class Order
,每个类都有一个方法eat()
。>
不使用Java基本类型,循环,if语句,而仅使用面向对象的功能,如何使此代码成为可能?
Order a = new Order();
//a will change state after each method is called.
a.eat(); // Prints "ate apple"
a.eat(); // Prints "ate banana"
a.eat(); // Prints "ate peer"
a.eat(); // Prints "ate apple"
a.eat(); // Prints "ate banana"
a.eat(); // Prints "ate peer"
答案 0 :(得分:2)
由于您的状态是纯数据,并且没有任何与之关联的行为,因此我认为完整状态设计对于此问题是过大的。我建议最简单的方法是使用一个非常基本的循环链表,每个节点中都有一个水果。 Order
类仅可以打印当前节点中的数据,然后在每次调用eat()
时前进到下一个。
例如
像这样给定Node
和Order
类
class Node {
Node next;
String data;
public Node(String data) {
this.data = data;
}
public String getData() {
return data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
class Order {
Node node;
public Order() {
Node apple = new Node("apple");
Node banana = new Node("banana");
Node pear = new Node("pear");
apple.setNext(banana);
banana.setNext(pear);
pear.setNext(apple);
this.node = apple;
}
public void eat() {
System.out.println(node.getData());
node = node.getNext();
}
}
您将获得所需的行为:
public static void main(String[] args) {
Order a = new Order();
a.eat(); // apple
a.eat(); // banana
a.eat(); // pear
a.eat(); // apple
a.eat(); // banana
a.eat(); // pear
}