国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據庫中數據項變化不定,如何設計Java Beans(2)

2019-11-18 13:44:28
字體:
來源:轉載
供稿:網友

  數據庫中數據項變化不定,如何設計java Beans(2)

2.1.2 相關屬性

   相關屬性是這樣的一種屬性,它的改變能以事件的形式通知給對它感愛好的部分,即事件收聽者或目標。很明顯,這種屬性的作用在于它能使收聽者接到其改變事件后根據其中的信息產生一些行為,從而達到兩者之間的默契。相關屬性的訪問者方法遵循與簡單屬性相同的形式,就是說單從訪問者方法是看不出其與簡單屬性的區別,但它要另外的附加類或接口以及事件的傳播機制的支持(后面,我們會看到這同樣適用于約束屬性)。
   實現一個關聯屬性涉及到三方,源Bean,目標Bean和協調代碼:

   ·源Bean

   源Bean必須提供屬性變化事件監聽器的注冊和解冊入口:

public void addPRopertyChangeListener (propertyChangeListener pcListener){}
public void removepropertyChangeListener (propertyChangeListener pcListener){}
   如只想通知目標Bean某個特定屬性的變化,可用下面特定屬性的注冊和解冊方法:

public void add<屬性名>Listener (propertyChangeListener pcListener){}
public void remove<屬性名>Listener (propertyChangeListener pcListener){}
   這樣,目標Bean只會接到源Bean此屬性的變化的事件通知,減少了不必要的信息通信。另外,為了實現關聯屬性的方便,系統提供了一個幫助者類propertyChangeSupport,源Bean可實例化這個幫助者類,讓它來為我們治理和維護收聽者列表以及屬性變化事件的通知的觸發等工作。

   ·目標Bean

   目標Bean除了要實現propertyChangeListener接口外,還要用源Bean提供的注冊方法注冊自己。這樣,目標Bean的實現大體框架如下:
public class targetBean implements propertyChangeListener{
protected SourceBean source;
……
source=new SourceBean();
source.addpropertyChangeListener(this);
public void propertyChange(propertyChangeEvent e){
……
}
}
   ·協調代碼

   協調代碼的工作職責分為以下幾步:

   a 負責創建源Bean和目標Bean;

   b 利用源Bean的屬性變化事件監聽器的注冊入口注冊目標Bean;

   c 改變源Bean的屬性的屬性

   d 利用源Bean的屬性變化事件監聽器的解冊入口解冊目標Bean;

· 2.1.3 約束屬性

   約束屬性是Beans所支持的最復雜最高級的屬性,它答應收聽者對屬性的改變提出否定意見。

   與相關屬性類似,其設計與實現也要涉及到源Bean、目標Bean和協調代碼。只要把相關屬性設計中的property改成Vetoable(除了propertyChangeEvent外),不同的是為了能使目標Bean"反對"源Bean屬性的變化。Beans提供了一種異常propertyVetoException,只要目標Bean收到屬性改變的事件通知后,查看屬性的新值,假如不滿足,可拋出一個異常,讓源Bean放棄改變屬性到這個新值的念頭,這就是約束屬性中給目標Bean增加的"反對權利"。下面的簡單源Bean和目標Bean的偽代碼表述了約束屬性的實現視圖。

   ·源Bean



public class SourceBean {
public void addVetoChangeListener (VetoChangeListener vpListener){}
public void removeVetoChangeListener (VetoChangeListener vpListener){}
   /*由于屬性設置器本身不想處理異常,所以我們拋出異常,當然你也可以在屬性設置器處理異常,屬性變化監聽者對屬性的變化作出同意還是反對就是通過拋出異常的實現的。*/

public void setName(String n) throws propertyVetoException{
/*從下面目標的代碼可能拋出一個異常從而終止代碼的執行
*/
實例化一個propertyChangeEvent對象
執行屬性變化監聽者的vetoChange方法
/*假如上面的代碼拋出異常,下面這行代碼不會被執行,
也就是說監聽者阻止了屬性的變化
*/
name=n //修改屬性的值
}
}

上一篇:探索String 類

下一篇:算術運算符

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富源县| 隆尧县| 耿马| 兴隆县| 来宾市| 温州市| 池州市| 伊宁市| 博爱县| 抚宁县| 巴楚县| 长治县| 亳州市| 罗山县| 鱼台县| 龙陵县| 公安县| 宜丰县| 万载县| 张北县| 五华县| 浦城县| 且末县| 象州县| 通渭县| 漯河市| 长武县| 达州市| 萨迦县| 永济市| 石首市| 赣州市| 牟定县| 博白县| 古丈县| 三门县| 宾川县| 北安市| 河源市| 开阳县| 四子王旗|