• 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。


    package cc.nommo.dp;

    import java.util.List;
    import java.util.ArrayList;

    public class Test {

        public static void main(String[] args) {
            Button btn1 = new Button("第一个按钮");
            Button btn2 = new Button("第二个按钮");
            
            //为第一个按钮添加监听器
            btn1.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(e.getName() + "被点击");
                }
            });

            //为第二个按钮添加监听器
            btn2.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(e.getName() + "被点击");
                }
                
            });
            
            
            //模拟点击事件
            btn1.click();
            btn2.click();
        }

    }


     class Button {
         

         private String name = null;    
         private List<ActionListener> actionlisteners = new ArrayList<ActionListener>();
         
         public Button(String name) {
            this.name = name;
         }
         
         public void click(){
             ActionEvent e = new ActionEvent(this.name);
             for(int i=0; i<actionlisteners.size(); i++){
                 ActionListener l = actionlisteners.get(i);
                 l.actionPerformed(e);
             }
         }
         
         public void addActionListener(ActionListener e){
             actionlisteners.add(e);
         }
     }

     /*
      * 监听器接口
      
    */
     interface ActionListener {
         public void actionPerformed(ActionEvent e);
     }
     
     /*
      * 事件源类
      
    */
     class ActionEvent {
         private String name;
         
         public ActionEvent(String name){
             this.name = name;
         }
         
         public String getName(){
             return name;
         }
     }

  • 相关阅读:
    使用MyBatis时接收值和返回值选择Map类型或者实体类型
    如何在开发时部署和运行前后端分离的JavaWeb项目
    6月22日项目CodeReview问题及总结
    【转载】CSRF攻击及其应对之道
    【转载】MySQL事务以及SELECT ... FOR UPDATE的使用
    win10打开SQLServer, SQL Server 配置管理器
    iframe标签和frame标签异同
    8款让你耳目一新的软件开发工具
    快速开发平台的比较
    CSDN:Java Web 开发平台 WebBuilder 专访
  • 原文地址:https://www.cnblogs.com/huanghai/p/2367911.html
Copyright © 2020-2023  润新知