为同一类的不同对象的update()分配不同的代码

时间:2014-02-19 16:19:35

标签: processing

是否可以将不同的代码加载到同一类的不同对象的更新函数中?即:

Button button = new Button();


class Button {
    // constructor, variables, etc
    void update() {
        //load code specific to the object
    }
}

我可以创建指向外部函数的指针(即在不同的文件中)吗?我知道我不能指出java,但有什么类似的吗?

2 个答案:

答案 0 :(得分:1)

一个类用于定义某些行为。当然,并非所有类的实例都必须与完全相同(例如,button1显示为红色,button2显示为蓝色),但它仍然是相同的基本行为。按钮不会像树一样,让button1.func()做一件事而button2.func()做一些完全不同的事情是没有意义的。话虽如此,如果你想要两个按钮的某种方法来做不同的事情,你有两个选择:将行为分成两个方法,或者(这可能是你想要的)按钮包含一个标识符变量并具有方法包含基于该变量的条件。这是一个例子:

class Button {
  // ID is 1 for green and 2 for blue
  int ID;
  Button(int id){
    ID = id;
  }
  void update(){
    if(ID == 1){ //green
      //do something
    else if(ID == 2){
      //do something else
    }
  }
}

回答你的问题:动态代码加载(例如来自文本文件)是一个坏主意,原因很多。首先,不清楚代码如果你读过它会做什么(你必须去查看另一个文件才能找到),其次,它会是一个巨大的安全漏洞,因为有人可以用恶意的东西替换你的文本文件,你会有不受控制的代码执行。

答案 1 :(得分:1)

示例界面代码

Button r = new RedButt(); // note Buton = new RedButt...
Button b = new BlueButt();
Button[] buttons = new Button[2];

void setup(){
  size(200,200);
buttons[0] = r;
buttons[1] = b;
for(Button b : buttons){
  b.display();
}
}


interface Button{
  void display();
}


class RedButt implements Button{

  RedButt(){
  }

  void display(){
    fill(255,0,0);
    ellipse(random(25, width-25), random(25, height -25), 50, 50);
  }
}



class BlueButt implements Button{

  BlueButt(){
  }

  void display(){
    fill(0, 0, 255);
    ellipse(random(25, width-25), random(25, height -25), 50, 50);
  }
}