我正在阅读 Orielly 设计模式,其中有一行是“ We can change the Behavior of
any object at runtime
”以及如何使用 getter 和 setter 在运行时更改对象的行为。
问问题
2745 次
3 回答
9
行为是对象的工作方式。运行时间是应用程序的生命。所以该声明意味着在程序运行期间我们能够操纵对象可以做什么。
要进行模拟,请参见以下示例:
public class MyObjectTest {
public static final void main(String[] args) {
MyObject myObject = new MyObject();
String theMessage = "No message yet.";
theMessage = myObject.readSecretMessage();
myObject.setIsSafe(true);
theMessage = myObject.readSecretMessage();
}
}
public class MyObject {
private boolean isSafe = false;
public boolean isSafe() {
return this.isSafe;
}
public boolean setIsSafe(boolean isSafe) {
return this.isSafe = isSafe;
}
public String readSecretMessage() {
if(isSafe()) {
return "We are safe, so we can share the secret";
}
return "They is no secret message here.";
}
}
分析:
该程序将返回两个不同的消息,取决于字段的决定isSafe
。这可以new
在运行时的对象生命周期(对象生命周期以 operator 开始)期间进行修改。
这意味着,我们可以改变对象的行为。
于 2013-04-02T08:59:38.510 回答
2
让我在运行时用 2 条腿和 4 条腿交替地遛猫 :).. 基本上,这意味着您可以在运行时使用 getter 和 setter 来改变 Cat 的行为。
class Cat
{
int legs = 2;
public void walk() {
System.out.println("Walking on " + legs + " legs");
}
public int getLegs()
{
return legs;
}
public void setLegs(int legs)
{
this.legs = legs;
}
}
public void static main()
{
Cat c = new Cat();
c.setLegs(4);
c.walk();
c.setLegs(2);
c.walk();
}
于 2013-04-02T09:06:30.337 回答
0
从表面上看,它是没有意义的,或者至少是不正确的。您可以更改对象的属性,但不能更改其行为(当然,除非其行为取决于其属性的值)。您必须提供更多上下文才能理解这一点。
于 2013-04-02T09:04:51.603 回答