欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基本事件處理機制解析

 更新時間:2023年10月18日 10:08:07   作者:Robin_zd  
這篇文章主要介紹了java基本事件處理機制解析,?Java事件處理機制是一種用于處理用戶交互和系統(tǒng)事件的編程模型,它基于事件驅(qū)動的思想,通過監(jiān)聽和響應(yīng)事件來實現(xiàn)程序的交互性和動態(tài)性,需要的朋友可以參考下

基本事件處理機制分析

一、什么是事件處理機制?

事件處理機制中參與有三種角色:事件源、事件、事件監(jiān)聽者

  • 事件源:產(chǎn)生事件的對象/組件
  • 事件:事件源的狀態(tài)發(fā)生改變之后的對象,如鼠標操作、鍵盤操作等
  • 事件監(jiān)聽者:負責(zé)監(jiān)聽事件的發(fā)生并處理事件

二、Action與ActionListener機制分析

Java GUI可以利用ActionListener進行ActionEvent的監(jiān)聽

其步驟如下:

  • 事件監(jiān)聽者實現(xiàn)了接口ActionListener的類實例
  • 事件源對象能夠添加監(jiān)聽器對象并向其發(fā)送事件對象
  • 當(dāng)事件發(fā)生時,事件源將事件對象發(fā)送給添加的監(jiān)聽器
  • 監(jiān)聽器對象對事件對象進行處理響應(yīng)

示例:

//actionlistener可以作為外部類、內(nèi)部類、匿名類進行監(jiān)聽,本示例使用內(nèi)部類
//兩個監(jiān)聽者對應(yīng)兩個button組件
private class bt1Handler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        jTextArea.setText("按鈕一點擊");
    }
}
private class bt2Handler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        jTextArea.setText("按鈕二點擊");
    }
}
//添加監(jiān)視器
bt1.addActionListener(bt1Handler);
bt2.addActionListener(bt2Handler);

效果:

在這里插入圖片描述

三、其他事件處理方式

(1)普通方法調(diào)用

它是一種阻塞式調(diào)用,例如A類中的方法a要調(diào)用B類中的方法b,必須要等待b方法執(zhí)行完畢才能執(zhí)行b方法之后的代碼,如果b方法執(zhí)行時間較長,整個過程就被阻塞在了這一步。

(2)回調(diào)函數(shù)

回調(diào)函數(shù)的概念十分簡單,就是將函數(shù)作為另一個函數(shù)的參數(shù),java中不允許方法作為參數(shù)們只能傳入類,然后調(diào)用類的方法,分為同步與異步回調(diào)函數(shù),下面分別實現(xiàn):

同步回調(diào):

//示例:我與朋友打電話讓他去我家吃飯,朋友同意
//Me類:
public class Me implements callable {
MyFriend friend;
public Me( MyFriend friend){
this.friend=friend;
}
public void callFriend() throws Exception {
	System.out.println("開始執(zhí)行同步回調(diào)函數(shù)");
System.out.println("去我家吃飯");
friend.answer(this);
System.out.println("開始執(zhí)行同步回調(diào)函數(shù)");
}
@Override
//回調(diào)函數(shù)
public void call(){
System.out.println("好好好");
}
}
//MyFriend類:
public class MyFriend {
public void answer( callable callable) throws Exception{
System.out.println("接線中.....");
callable.call();
}
}
//callable接口:
public interface callable {
public void call();
}
//test類:
public class testCallBack {
public static void main(String[] args) throws  Exception{
MyFriend friend=new MyFriend();
Me me=new Me(friend);
me.callFriend();
}
}

結(jié)果:

在這里插入圖片描述

異步回調(diào):

//與同步回調(diào)區(qū)別是,回調(diào)函數(shù)單開一個線程,不影響和Me類等待回調(diào)函數(shù)執(zhí)行完成
public void callFriend() throws Exception {
System.out.println("開始執(zhí)行異步回調(diào)函數(shù)");
new Thread(new Runnable() {
  @Override
  public void run() {
      try {
          System.out.println("去我家吃飯");
          friend.answer(Me.this);
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
}).start();
System.out.println("異步回調(diào)函數(shù)執(zhí)行完成");
}

結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9BFKSZiM-1663237616444)(C:\Users\zdsss\AppData\Roaming\Typora\typora-user-images\image-20220915174027734.png)]

(3)觀察者模式

所謂觀察者模式,其實是一種一對多的模式,有一個被觀察者以及多個觀察者,當(dāng)被觀察者的狀態(tài)發(fā)生變化時,觀察者可以收到相應(yīng)的信息。像我們平時訂閱一個微信公眾號或者是b站上關(guān)注一個up主,當(dāng)其發(fā)布新內(nèi)容時,你就會得知相應(yīng)的信息。

示例:

//你關(guān)注的up主更新了,并私信通知他的所有粉絲

//觀察者接口
public interface Observer {
    public void update(String video);
}
//具體觀察者(粉絲)類
public class Fan implements Observer{
    private String name;//粉絲姓名
    public Fan(String name){
        this.name=name;
    }

    @Override
    public void update(String video){
        System.out.println(name+"! "+video);
    }
}

//被觀察者接口
public interface UpLoader {
    //添加粉絲
    void addFan(Fan fan);
    //刪除粉絲
    void deleteFan(Fan fan);
    //通知粉絲
    void informFan(String video);
}

//實現(xiàn)類
public class BilibliUpLoader implements UpLoader{
    public String getName() {
        return name;
    }

    private String name;
    private List<Fan> fanList=new ArrayList<>();
    public BilibliUpLoader(String name){
        this.name=name;
    }
    @Override
    public void addFan(Fan fan) {
        fanList.add(fan);
    }

    @Override
    public void deleteFan(Fan fan) {
        fanList.remove(fan);
    }

    @Override
    public void informFan(String video) {
        for(Fan fan:fanList){
            fan.update(video);
        }
    }
}
//測試類
public class test {
    public static void main(String[] args) {
        BilibliUpLoader bilibliUpLoader=new BilibliUpLoader("Mike");
        Fan fan=new Fan("jack");
        Fan fan1=new Fan("Bob");
        Fan fan2=new Fan("Mary");
        Fan fan3=new Fan("Lisa");
        bilibliUpLoader.addFan(fan);
        bilibliUpLoader.addFan(fan1);
        bilibliUpLoader.addFan(fan2);
        bilibliUpLoader.addFan(fan3);
        bilibliUpLoader.informFan(bilibliUpLoader.getName()+"的新視頻來了");
    }
}

結(jié)果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1R25jW6d-1663237616444)(C:\Users\zdsss\AppData\Roaming\Typora\typora-user-images\image-20220915174005365.png)]

(4)幾種事件處理機制綜合比較

以上四種事件處理機制中可以分為兩類,普通方法調(diào)用為一類,其他三種為第二類:

抽象與解耦:

這三種事件處理方式利用接口將抽象類與實現(xiàn)類的耦合度降低,同時將接口充當(dāng)調(diào)用者與被調(diào)用者之間的第三者,通過接口盡可能減少不同類的依賴關(guān)系,盡可能增大數(shù)據(jù)耦合,從而降低耦合程度。

高內(nèi)聚:

后三鐘事件處理方式,將不同主體分開來(如觀察者與被觀察者),每個實體類專注于自身的職責(zé)(即單一原則)。

好處:

“高內(nèi)聚,低耦合”使得后面三種事件處理方式易于擴展、靈活性高、更易于維護與開發(fā),而普通的函數(shù)調(diào)用則不具備這些優(yōu)點。這也是面向接口編程的一大特點。

到此這篇關(guān)于java基本事件處理機制解析的文章就介紹到這了,更多相關(guān)java事件處理機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之整合Swagger2到通用模塊

    實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之整合Swagger2到通用模塊

    這篇文章主要為大家介紹了實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之整合Swagger2到通用模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 聊聊Arrays.deepToString()和Arrays.toString()的區(qū)別

    聊聊Arrays.deepToString()和Arrays.toString()的區(qū)別

    這篇文章主要介紹了聊聊Arrays.deepToString()和Arrays.toString()的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼

    Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼

    這篇文章主要介紹了Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Java9新特性對HTTP2協(xié)議支持與非阻塞HTTP?API

    Java9新特性對HTTP2協(xié)議支持與非阻塞HTTP?API

    這篇文章主要為大家介紹了Java9新特性對HTTP2協(xié)議的支持與非阻塞HTTP?API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 最新評論