zoukankan      html  css  js  c++  java
  • 观察者模式

    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();
    		}
    		
    	}
    	
    	
    }
    

      

  • 相关阅读:
    Linux注意到Makefile
    coco2dx c++ HTTP实现
    怎么样putty打开图形化管理工具,在终端上
    javabean总结
    发布Ubuntu/Linux系统cache,增加可用内存空间
    Java获得正则表达式
    uva 11992 为矩阵更新查询段树
    oracle在schema是什么意思?
    zoj 3288 Domination (可能dp)
    学习算法
  • 原文地址:https://www.cnblogs.com/yoyo198212/p/8436723.html
Copyright © 2011-2022 走看看