java - 子类如何在孪生设计模式中进行通信?

原文 标签 java design-patterns subclass multiple-inheritance

我正在研究孪生设计模式。我明白了这个概念,但是在实现时我无法完全理解子类如何相互通信。我在 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 类的所有方法。

Hence, BallThread is achieving Multiple Inheritance by inheriting Thread class and composing BallItem class.

关于java - 子类如何在孪生设计模式中进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307272/

相关文章:

java - 如何在 Fragment 中授予相机权限

c++ - 在 OOP 中使用类 C API

java - 如何在 android 中选择上一个微调器时获取微调器项目?

javascript - 为什么在 JQuery/JavaScript 中使用扩展?

c# - 二维模式搜索

java - 从重写的子类方法调用父类(super class)方法

python - 应该从python中的子类调用__exit__父类(super class)方法

带有类型参数的 Java 类

java - Java:当涉及父/子时,如何在ArrayList中获取值?

java - 为什么在扩展的抽象类中需要另一个构造函数?