观察者模式
public class Car { private String name ; private int x ; private int y ; private HashSet<CarListener> listeners = new HashSet<CarListener>(); public Car(String name, int x, int y) { super(); this.name = name; this.x = x; this.y = y; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public void drawMe(Graphics g){ g.drawRect(x, y, 50, 50); } public void driver(){ for(CarListener l:listeners){ l.move(this); } System.out.println("开始驾驶"); } public void stop(){ for(CarListener l:listeners){ l.move(this); } System.out.println("停车"); } public void addListener(CarListener l){ this.listeners.add(l); } }
public interface CarListener { public void move(Car car); }
public class Controller extends KeyAdapter implements CarListener{ private Car car ; @Override public void keyPressed(KeyEvent e) { super.keyPressed(e); System.out.println("处理按键事件"); int x = car.getX(); int y = car.getY(); switch (e.getKeyCode()) { case KeyEvent.VK_W: y-=10; car.setY(y); move(car); break; case KeyEvent.VK_S: y+=10; car.setY(y); move(car); break; default: break; } } public Controller(Car car) { super(); this.car = car; } @Override public void move(Car car) { System.out.println("control move方法"+car); System.out.println("控制器的move方法"); } }
public class GameFrame extends JFrame implements Runnable{ private Car car ; public GameFrame(Car c){ this.car = c ; this.setLocation(400, 50); this.setSize(500, 500); this.setDefaultCloseOperation(3); this.setVisible(true); } @Override public void paint(Graphics g) { super.paint(g); car.drawMe(g); } @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } int x = car.getX(); car.setX(++x); repaint(); } } }