eclipshine

          Eclipse主題站

          在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

          主站蜘蛛池模板: 游戏| 望奎县| 昭苏县| 廉江市| 百色市| 博爱县| 北海市| 休宁县| 尼勒克县| 定州市| 龙口市| 乌苏市| 哈巴河县| 汤阴县| 视频| 乡宁县| 喀喇沁旗| 乌恰县| 辉南县| 木里| 清新县| 长丰县| 新竹县| 措勤县| 红原县| 增城市| 新干县| 定州市| 株洲县| 建湖县| 久治县| 平江县| 介休市| 绵竹市| 南郑县| 海口市| 易门县| 泽州县| 太仆寺旗| 鄂州市| 施甸县|