儿童课如何在Twin Design Pattern中进行交流?

Naz*_*que 5 java design-patterns subclass multiple-inheritance

我正在研究Twin设计模式.我得到了这个概念,但是当涉及到实现时,我无法完全理解子类如何相互通信.我在java中发现了一个'球游戏'的例子,我仍然无法从中找到答案.

你能解释一下子课如何沟通或交换信息吗?如果您可以在java中提供一个或两个简单示例,将会很有帮助.

双设计模式结构的图象

Sau*_*h.V 0

两个子类能够相互通信,因为它们都是彼此的对象。

让我们以维基百科文章“孪生模式”中的以下示例来理解这一点:

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;
     }
}
Run Code Online (Sandbox Code Playgroud)


public class BallThread extends Thread {
   BallItem twin;
   public void run() {
     while (true) {
       twin.draw(); /*erase*/ twin.move(); twin.draw();
     } 
   }
}
Run Code Online (Sandbox Code Playgroud)

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

因此,BallThread通过继承Thread类并组合BallItem类来实现多重继承。