Chinaunix首页 | 论坛 | 博客
  • 博客访问: 711205
  • 博文数量: 160
  • 博客积分: 8847
  • 博客等级: 中将
  • 技术积分: 1656
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-25 16:46
个人简介

。。。。。。。。。。。。。。。。。。。。。。

文章分类

全部博文(160)

文章存档

2015年(1)

2013年(1)

2012年(4)

2011年(26)

2010年(14)

2009年(36)

2008年(38)

2007年(39)

2006年(1)

分类: Java

2009-05-26 16:50:37



Java的接口用法之一,暴露特定的方法给类使用;用法之二,当某个事件发生的时候,强制执行特定的方法。

举例说明:
假设有一个接口,监听足球比赛的分数,当分数发生变化的时候,将当前的比赛成绩公布到一个电子版上。

package cn.youhap.football;

public interface FootballListener {
    public void setHomeTeam(String h);
    public void setVisitingTeam(String v);
    public void setEndOfQuarter(int q);
    public void homeTeamScored();
    public void visitingTeamScored();
}


足球比赛的类:

package cn.youhap.football;

import java.util.Vector;

public class FootballGame {
    private String visitingTeam;
    private String homeTeam;
    public static int visitingTeamScore = 0;
    public static int homeTeamScore = 0;
    private int endOfQuarter;
    private Vector<FootballListener> audious;
    public FootballGame(String h, String v, int q){
        this.setHomeTeam(h);
        this.setVisitingTeam(v);
        this.setEndOfQuarter(q);
        this.audious = new Vector<FootballListener>(10);
    }
    public void setVisitingTeam(String visitingTeam) {
        this.visitingTeam = visitingTeam;
    }
    public String getVisitingTeam() {
        return visitingTeam;
    }
    public void setHomeTeam(String homeTeam) {
        this.homeTeam = homeTeam;
    }
    public String getHomeTeam() {
        return homeTeam;
    }

    public int getVisitingTeamScore() {
        return visitingTeamScore;
    }

    public int getHomeTeamScore() {
        return homeTeamScore;
    }
    public void setEndOfQuarter(int endOfQuarter) {
        this.endOfQuarter = endOfQuarter;
    }
    public int getEndOfQuarter() {
        return endOfQuarter;
    }
    public void homeTeamScored(){
        int audiousSize = this.audious.size();
        for (int i = 0; i < audiousSize; i++){
            FootballListener current = (FootballListener)this.audious.elementAt(i);
            current.homeTeamScored();
        }
    }
    public void visitingTeamScored(){
        int audiousSize = this.audious.size();
        for (int i = 0; i < audiousSize; i++){
            FootballListener current = (FootballListener)this.audious.elementAt(i);
            current.visitingTeamScored();
        }
    }
    public void addListener(FootballListener f){
        this.audious.add(f);
        f.setHomeTeam(this.getHomeTeam());
        f.setVisitingTeam(this.getVisitingTeam());
    }
    public void endOfQuarter(int quarter){
        int audiousSize = this.audious.size();
        for (int i = 0; i < audiousSize; i++){
            FootballListener current = (FootballListener)this.audious.elementAt(i);
            current.setEndOfQuarter(quarter);
        }
    }
    
}


当homeTeamScored(主队得分)visitingTeamScored(客队得分)的事件发生的时候,将电子版等“听众”加入到向量中,逐个通知它们比赛成绩。

由于电子版实现了接口FootballListener,根据多态,将执行电子版的homeTeamScored或者visitingTeamScored方法。


package cn.youhap.football;

public class ScoreBoard implements FootballListener {
    private String homeTeam;
    private String visitingTeam;
    private int quarter;
    private int homeTeamScore;
    private int visitingTeamScore;
    public ScoreBoard(){
        super();
    }
    public void setHomeTeam(String h){
        this.homeTeam = h;
    }
    public String getHomeTeam(){
        return this.homeTeam;
    }
    public void setVisitingTeam(String v){
        this.visitingTeam = v;
    }
    public String getVisitingTeam() {
        return this.visitingTeam;
    }
    public void setEndOfQuarter(int q){
        this.quarter = q;
    }
    public void setHomeTeamScore(int homeTeamScore) {
        this.homeTeamScore = homeTeamScore;
    }
    public int getHomeTeamScore() {
        return homeTeamScore;
    }
    public void setVisitingTeamScore(int visitingTeamScore) {
        this.visitingTeamScore = visitingTeamScore;
    }
    public int getVisitingTeamScore() {
        return visitingTeamScore;
    }
    public void homeTeamScored(){
        this.homeTeamScore++;
        this.displayScore();
    }
    public void visitingTeamScored(){
        this.visitingTeamScore++;
        this.displayScore();
    }
    public int getEndOfQuarter(){
        return this.quarter;
    }
    public void displayScore(){
        System.out.println("***************************************************");
        System.out.println(this.getHomeTeam() + ":" + this.getHomeTeamScore());
        System.out.println(this.getVisitingTeam() + ":" + this.getVisitingTeamScore());
        System.out.println("***************************************************");
    }

}


演示:

package cn.youhap.football;

public class FootballDemo {
    public static void main(String[] args) {
        FootballGame football = new FootballGame("巴西", "德国", 1);
        ScoreBoard s = new ScoreBoard();
        football.addListener(s);
        football.homeTeamScored();
        football.visitingTeamScored();
        football.homeTeamScored();
    }
}


结果:
***************************************************
巴西:1
德国:0
***************************************************
***************************************************
巴西:1
德国:1
***************************************************
***************************************************
巴西:2
德国:1
***************************************************
阅读(1261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~