如果您想通知「觀察班級」您的世界班級出現KeyPress事件,那麼這是利用觀察員的好時機。結構想是這樣的:
public interface Observer
{
public void update(KeyEvent keyEvent);
}
public interface Observable
{
public void NotifyObservers(KeyEvent keyEvent);
}
public class World implements KeyListener, Observable
{
private ArrayList<Observer> obsList;
public World()
{
obsList = new ArrayList();
}
public void keyPressed(KeyEvent e)
{
NotifyObservers(e);
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void NotifyObservers(KeyEvent keyEvent)
{
for(Observer obs : obsList)
{
obs.update(keyEvent);
}
}
public void AddObserver(Observer obs)
{
if (obs != null)
obsList.add(obs);
}
public void DelObserver(Observer obs)
{
if (obs != null)
obsList.remove(obs);
}
}
public class Blobs extends JFrame implements Observer
{
public Blobs()
{
super("Blobs :) - By Chris Tanaka");
//Register this instance of Blobs as an observer that is stored in the World's
//obsList ArrayList field
World world = new World();
world.addObserver(this);
setResizable(false);
setSize(1000, 1000);
setIgnoreRepaint(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().add(world);
this.addKeyListener(world);
setVisible(true);
}
public static void main(String[] args) {
new Blobs();
}
public void update(KeyEvent keyEvent)
{
//do whatever here when key event occurs
}
}
所以這裏最終的結果是,你可以實現我所定義的obsList觀察員接口部分的任何類。然後,當發生keyevent時,它將調用NotifyObservers()方法遍歷列表並調用Observing類中的update()方法。
編輯:
你可以同時擁有世界和戰鬥類處理以自己的方式的關鍵事件,如果你需要的話。
public class Battle implements Observer
{
public void update(KeyEvent e)
{
// do processing here
}
}
public class Blobs implements Observer
{
public void update(KeyEvent e)
{
// do processing here
}
}
你只需要在某些時候加入戰鬥作爲觀察員參加你的世界級的就像我在斑點
worldInstance.addObserver(new Battle());
另外做了,如果你想使用的標誌,只允許某些類處理的KeyEvents那麼你可以簡單地更新接口,允許合格標誌的更新方法爲這樣:
public interface Observer
{
public void update(object isFor, KeyEvent e);
}
那麼觀察者更新的方法將有這種流:
public class Battle
{
public void update(object flag, KeyEvent e)
{
if (flag instanceof Battle)
{
//now do your work
}
}
}
這也意味着更新可觀察接口和實現者
我們可以看到世界一流的通知方法? – 2011-02-27 05:05:42