在EMF中為一個(gè)對(duì)象樹(shù)添加統(tǒng)一的事件響應(yīng)
在EMF中進(jìn)行模型對(duì)象通知的時(shí)候,有時(shí)候不僅僅模型對(duì)象改變時(shí)需要得到通知,模型對(duì)象的子對(duì)象(通過(guò)Containment關(guān)系包含起來(lái)的)發(fā)生改變的時(shí)候,也希望能夠得到同樣的通知。簡(jiǎn)單的實(shí)現(xiàn)方式可以創(chuàng)建一個(gè)Adapter,通過(guò)遞歸的方式將其注冊(cè)在這個(gè)模型對(duì)象樹(shù)的每一個(gè)節(jié)點(diǎn)對(duì)象上,但是那樣做比較復(fù)雜,要同時(shí)處理添加和刪除Adapter的工作。
在EMF中提供了變通的方式,可以使用EContentAdapter類來(lái)幫助完成這個(gè)任務(wù)。如下例所示:
public class ComponentAdapter extends EContentAdapter {
private Component component;
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
System.out.println(notification);
refresh();
}
public ComponentAdapter(Component component) {
component.eAdapters().add(this);
}
public void removeSelf() {
component.eAdapters().remove(this);
}
}
通過(guò)構(gòu)造函數(shù)ComponentAdapter,可以將這個(gè)Adapter添加到Component這個(gè)模型對(duì)象上。當(dāng)Component自身,或者Component的人和子孫節(jié)點(diǎn)發(fā)生改變的時(shí)候,notifyChanged都能被調(diào)用,處理接受通知的任務(wù)。
實(shí)際上EContentAdapter不僅僅能夠被添加到一個(gè)EObject上,還能夠被添加到Resource甚至ResourceSet上,它都能夠自動(dòng)的把自身添加到每一個(gè)節(jié)點(diǎn)上,以響應(yīng)事件,當(dāng)其被刪除時(shí),它也能夠自動(dòng)的將其自身從每一個(gè)子節(jié)點(diǎn)上刪除。
posted on 2005-07-29 15:40 Living Not Striving 閱讀(911) 評(píng)論(0) 編輯 收藏 所屬分類: EMF