多米诺骨牌的例子

wwlhp@jdon.com 03-06-12

本人初学设计模式,在这里用观察者模式实现了多米诺骨牌的模拟,请大家多多指点。


import java.util.Observable;
import java.util.Observer;

// 每一张牌对前一张牌来说是观察者对象,
// 对后一张牌来说是主题对象。
public class Domino extends Observable implements Observer
{
private int domino_no;

public Domino( int no ){
domino_no = no;
}

public synchronized void update( Observable o, Object obj ){
if( o instanceof Domino ){
System.out.println( o+ " crashed "+ this );
fall();
}
}

public synchronized void fall(){
setChanged();
System.out.println( this+ " falling down" );
notifyObservers();
}

// 设置当前的多米诺牌在domino的后面
public synchronized void setAfter( Domino domino ){
domino.addObserver( this );
}

public String toString(){
return ( "Domino "+ domino_no );
}


public static void main( String[] args ){
Domino[] dominoes = new Domino[10];
for( int i = 0; i < 10; ++i ){
dominoes = new Domino( i );
if( i > 0 ){
dominoes.setAfter( dominoes[i-1] );
}
}
dominoes[0].fall();
}

}

wildfox
2003-06-12 17:40

唯一有点遗憾的就是你的 main() 方法里有笔误 应该是

for( int i = 0; i < 10; ++i ){
dominoes = new Domino(i);
if( i > 0 ){
dominoes.setAfter(dominoes[i-1]);
}
}

wildfox
2003-06-12 17:42

奶奶的 看来不是你的笔误 是这里不能输入方括号