6

我正在阅读 Orielly 设计模式,其中有一行是“ We can change the Behavior of any object at runtime”以及如何使用 getter 和 setter 在运行时更改对象的行为。

4

3 回答 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 回答