孩子类如何以双设计模式进行交流?

问题描述:

我正在研究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希望延长两个线程和BallItem。但是如果你看到,BallThread继承了Thread并且组成了一个BallItem类。通过引用BallItem类(或组成BallItem类),BallThread将能够调用BallItem类的所有方法。

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