我正在研究Twin设计模式。我有这个概念,但是当涉及到实现时,我无法完全理解子类之间的通信方式。我在Java中发现了一个“球类游戏”示例,但我仍然无法从中弄清楚。

您能解释一下子类如何交流或交换消息吗?
如果您可以在Java中提供一个或两个简单的示例,将很有帮助。

Image of twin design pattern structure

最佳答案

两个子类都可以彼此通信,因为它们都是彼此组成的对象。

让我们以Wikipedia article "Twin pattern"为例,以了解这一点:

public class BallItem extends GameItem {
     BallThread twin;

     int radius; int dx, dy;
     boolean suspended;

     public void draw(){
        board.getGraphics().drawOval(posX-radius, posY-radius,2*radius,2*radius);
     }

     public void move() {
       posX += dx; posY += dy;
     }

     public void click() {
       if (suspended) twin.resume(); else twin.suspend();
       suspended = ! suspended;
     }

     public boolean intersects (GameItem other) {
      if (other instanceof Wall)
       return posX - radius <= other.posX && other.posX <= posX + radius || posY - radius <= other.posY && other.posY <= posY + radius;

      else return false;
     }

     public void collideWith (GameItem other) {
      Wall wall = (Wall) other;
      if (wall.isVertical) dx = - dx; else dy = - dy;
     }
}
public class BallThread extends Thread {
   BallItem twin;
   public void run() {
     while (true) {
       twin.draw(); /*erase*/ twin.move(); twin.draw();
     }
   }
}

假设BallThread想要同时扩展Thread和BallItem。但是,如果看到的话,BallThread继承了Thread并组成了BallItem类。通过引用BallItem类(或组成BallItem类),BallThread将能够调用BallItem类的所有方法。

关于java - 子类如何在“双胞胎设计模式”中进行交流?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43307272/

10-12 02:11