public class Frame1 extends Frame implements Frame2.MoneyListener {
private Label label = new Label("金额:");
private Button button = new Button("购买");
public Frame1(){
this.setSize(400,200);
this.setLayout(new FlowLayout());
this.add(button);
this.add(label);
button.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 text = new TextField(20);
private Button button = new Button("付款");
public Frame2(){
this.setSize(400,200);
this.setLayout(new FlowLayout());
this.add(text);
this.add(button);
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
String money = Frame2.this.text.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);}}
观察者模式
//被观察者接口
public interface MessageSubject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();}
//观察者接口
public interface Observer {
//更新消息
public void update(String message);}
//具体的被观察者
public class Message implements MessageSubject {
//维护的所有观察者列表
private List<Observer> list = new ArrayList<>();
private String message;
public void setMessage(String message){
this.message=message;
notifyObservers();}
@Override
public void registerObserver(Observer o){
list.add(o);}
@Override
public void removeObserver(Observer o){
list.remove(o);}
@Override
public void notifyObservers(){for(int i = 0; i < list.size(); i++){
Observer observer = list.get(i);
observer.update(message);}}}
//具体的观察者
public class User implements Observer{
private String name;
public User(String name){
this.name = name;}
@Override
public void update(String message){
System.out.println(name+"收到消息: "+message);}}
public class TestDemo {
public static void main(String[] args){
Message message = new Message();
User user1 = new User("lili");
User user2 = new User("tom");
User user3 = new User("bing");
message.registerObserver(user1);
message.registerObserver(user2);
message.registerObserver(user3);
message.setMessage("hello world,java is best");}}