• 观察者模式


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

      

  • 相关阅读:
    【原】WPF客户端只能启动一次
    【转载】U3D 游戏引擎之游戏架构脚本该如何来写
    【转载】u3d游戏客户端架构(---)
    【转载】asp.net 后台弹出提示框
    【转载】浅谈Excel开发:一 Excel 开发概述
    MyBatis 学习
    windows下关闭指定端口服务,解决tomcat端口占用问题
    中文用户名的js检验正则
    演讲稿
    面向对象和面向过程,python中的类class,python中程序的入口——main方法,
  • 原文地址:https://www.cnblogs.com/yoyo198212/p/8436723.html
Copyright © 2020-2023  润新知