1

我正在研究控制物理安装的东西。安装存在一个网格,每个单元格可以是黑色或白色。Atm 我有这个方法:

void programRunner(int message) {
        if (message == STARTSHOWTIME) {
          println("showtime");
        }
        if (message == ENDSHOWTIME) {
          println("parse new state");
          boolean[][] nextState = randomState();
          gridCommunicator.nextState(nextState);
          checkMatrix.set(nextState);
        }
      }

它传递一个多维数组,其中 true 为白色,false 为黑色。每当安装准备好并将某些东西设置到位以及进入下一个时,它就会被调用。

但是应该有多种模式,一种是随机的黑白模式,另一种是绘制字母,一种是显示图像等。

我想将每种模式都作为一个对象,我只是不知道我到底在寻找什么。举个例子:

class Program {

  String programName;

  Program(String programName) {
    this.programName = programName;
  }

  // . . . . . . . . . . . . . . . . . . .

  void programRunner(int message) {
    if (message == STARTSHOWTIME) {
      println("showtime");
    }
    if (message == ENDSHOWTIME) {
      println("parse new state");
      boolean[][] nextState = randomState();
      gridCommunicator.nextState(nextState);
      checkMatrix.set(nextState);
    }
  }

  // . . . . . . . . . . . . . . . . . . .


}

方法 programRunner 现在仍然是相同的,并且要拥有不同的方法,我必须创建一个新类。但我不想要一个新类,我更喜欢我可以创建对象并将方法 programRunner 的样子传递给它。在java中可能有这样的事情吗?

4

1 回答 1

4

如果您需要自定义具有几个变化部分的方法的行为,

  1. 使用与部件一样多的方法创建接口;
  2. 对于每一种不同的情况,将一个匿名类实例传递给您的方法,该类实例使用特定的案例特定逻辑实现接口。

解决方案的草图如下。

界面:

interface Strategy {
  void m1(); void m2();
}

你的方法:

void actionMethod(Strategy s) {
  s.m1(); s.m2();
}

调用方法:

actionMethod(new Strategy() { 
   public void m1() { ...stuff 1...}
   public void m2() { ...stuff 2...}
});
于 2012-10-09T10:14:58.907 回答