「為所欲為」的匿名類 觀察者篇

2021-10-06 03:59:46 字數 1071 閱讀 9365

通曉程式語言的基本知道,按作用範圍(或者說「域」),變數有區域性或全域性變數之分。域也可以說是「context」。如果按源**檔案來分,則有內部和外部的context域之分。弄清楚context域的意義,才有助於理解程式語言的設計作者的思想,提高自我的程式設計質素。這些跟題目的匿名類有什麼關係?

我們知道,匿名類是「隨手」起的。它重複率不高,但是又具有「相似」動作。所以每次使用的時候,需要重新定義動作內容。這除了少量的定義可以重複外,它怎麼就能「為所欲為」了呢?

先來看看下面的**:

package com.mrn6.annonymous_class_example;

public class listener

}

package com.mrn6.annonymous_class_example;

public class mainactivity extends actiivty

// the following is listener's definition.

}

這上面的listener和mainactivity定義在同一源**檔案中,所以按檔案分context域,它們是在同一context域內部。因此,當listener匿名類在例項化後,可以呼叫mainactivity的任何全域性變數。這正是匿名類的魅力所在。再看下面的**:

package com.mrn6.annonymous_class_example;

public class mainactivity extends actiivty

});}

private void setlistener(listener listener)

// the following is listener's definition.

}

可以看到handler是mainactivity的變數,但是匿名類listener的例項可以訪問。handler在android中可以訪問ui資源。這樣即使將listener類的定義放置任何地方,依然可以修改當前main context域的包括ui介面在內的任何資源,可謂「為所欲為」。

學習篇 設計模式 觀察者模式

觀察者模式定義了物件間的一種一對多依賴關係,使得每當乙個物件改變狀態,則所有依賴於它的物件都會得到通知並被自動更新。它將觀察者和被觀察者的物件分離開。提高了應用程式的可維護性和重用性。觀察者模式又稱為發布 訂閱 publish subscribe 模式。使用場景 1 對乙個物件狀態的更新,需要其他物...

內容的觀察者

text1 中 persondbopenhelper頁面 建立資料 public class persondbopenhelper extends sqliteopenhelper override public void oncreate sqlitedatabase db override pu...

設計模式真解 觀察者模式篇

觀察者模式 典型應用 客戶端的mvc架構中m和v的關係,服務端資料更新存檔機制,遊戲中任務,成就,預警的事件監聽,都適合用觀察者模式 模式描述 觀察者模式主要用於處理 一 對 多 的關係,當 1 發生變化的時候,多 需要分別發生變化,而且這個 多 的內容會進行動態增減,於是 多 就去 1 處訂閱,當...