java - 子类如何在双胞胎设计模式中进行交流?

标签 java design-patterns subclass multiple-inheritance

我正在研究 Twin 设计模式。我理解了这个概念,但是当涉及到实现时,我无法完全理解子类之间是如何通信的。

子类如何交流或交换消息?

Example 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/

相关文章:

design-patterns - 服务层 = 应用层 = GRASP Controller 层

java - 学习多态性时对错误感到困惑

java - 为什么java多态性在我的例子中不起作用

java - 跟踪 fragment 生命周期,如 Application.ActivityLifecycleCallbacks

java - 使用 for 循环而不是字符串方法打印字符串的每个子字符串

java - ArrayList 访问类中的方法

ios - 子类 PFLogInViewController 以呈现自定义 UIAlertViews

java - Eclipse 中的 java.util.Scanner 无限循环

java - 理解单一职责原则

design-patterns - 享元模式与静态字段