Java接口回调

来源:互联网 发布:excel数据库功能 编辑:程序博客网 时间:2024/06/08 10:35

转自:http://www.cnblogs.com/wangming007/p/5122701.html

举例:老板分派给员工做事,员工做完事情后需要给老板回复,老板对其做出反应。
上面是个比较经典的例子,下面用代码实现上述例子:

(1)先定义一个接口

public interface JieKou {    public void show();}

(2)定义一个Boss类实现接口

public class Boss implements JieKou{//定义一个老板实现接口    @Override    public void show() {        System.out.println("知道了");    }}

(3)定义一个员工Employee类

public class Employee {    //接口属性,方便后边注册    JieKou jiekou;    //注册一个接口属性,等需要调用的时候传入一个接口类型的参数,即本例中的Boss和Employee    public Employee zhuce(JieKou jiekou,Employee e){        this.jiekou=jiekou;        return e;    }    public void dosomething(){        System.out.println("拼命做事,做完告诉老板");        //接口回调,如果没有注册调用,接口中的抽象方法也不会影响dosomething        jiekou.show();    }}

(4)测试类

public class Test {    public static void main(String[] args) {        Employee e=new Employee();        //需要调用的时候先注册,传入Boss类型对象和员工参数        Employee e1=e.zhuce(new Boss(),e);        e1.dosomething();    }}

通过上面的例子和代码应该有个比较初步的了解了,接口回调还有使用匿名内部类来实现,但是我觉得没有这种理解清晰,所以你懂得,记住这个,理解它就欧了


应用:在两个窗口中传值。Frame2窗口中填入的值,当点击按钮时,这个值显示在Frame1窗口中。

public class Frame1 extends Frame implements Frame2.MoneyListener{    private Label label=new Label("金额");    private Button btn=new Button("购买");    public Frame1(){        this.setSize(400,200);        this.setLayout(new FlowLayout());        this.add(label);        this.add(btn);        btn.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                new Frame2().setMoneyListener(Frame1.this);//设置事件(监听者)            }        });        this.setVisible(true);    }    @Override    public void setMoney(String money) {        label.setText(money);    }    public static void main(String[] args){        new Frame1();    }}
/** * 接口回调: *  当一个对象需要给外部对象提供数据时,我们可以定义一个内部接口把数据通过接口传递出去, *  所有外部对象需要这个数据时,就实现这个接口,这样的好处是: *  传递数据的对象不直接依赖接收数据的对象(降低耦合性) */public class Frame2 extends Frame {    private TextField textField=new TextField(20);    private Button btn=new Button("付款");    public Frame2(){        this.setSize(400,200);        this.setLayout(new FlowLayout());        this.add(textField);        this.add(btn);        btn.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                String money=textField.getText();                moneyListener.setMoney(money);            }        });        this.setVisible(true);    }    private MoneyListener moneyListener;    public void setMoneyListener(MoneyListener moneyListener){        this.moneyListener=moneyListener;    }    public static interface MoneyListener{        public void setMoney(String money);    }}