• 观察者模式


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

      

  • 相关阅读:
    python set 使用
    python判断字符串是字母 数字 大小写
    go语言中的运算符^,&
    golang 之 flag.String
    关于Mac或Linux下GO的Permission denied提示错误
    《算法竞赛进阶指南》0x05排序 POJ3784 对顶堆动态维护中位数
    大顶堆的基本操作(线性表建堆+siftup+siftdown+insert+delete)
    《算法竞赛进阶指南》0x05排序 环形均分纸牌问题
    SublimeText3配置c/c++环境
    《算法竞赛进阶指南》0x05 排序 离散化
  • 原文地址:https://www.cnblogs.com/yoyo198212/p/8436723.html
Copyright © 2020-2023  润新知