GEF架構中的設計模型(觀察者模式)

來源:互聯網
上載者:User
 

       觀察者模式(Observer)定義:多個對象同時監聽某個主題對象,如果主題對象的屬性發生變化,會通知所有觀察者,使它們進行相應的操作。       根據這個定義,流程設計器中的模型和控制器的關係,就是觀察者模式的典型應用,一個模型對應多個控制器,而這些控制器都監聽模型屬性的變化,如果模型屬性發生變化了,就通知該模型的所有控制器,讓它們重新整理該模型對應的視圖。       舉例:模型(AbstractActivity),對應的控制器(AbstractActivityEditPart, AbstractActivityTreeEditPart),這兩個控制器在生效時,把自己作為監聽器註冊到模型(AbstractActivity)中, public void activate() {       if (!isActive()) {           super.activate();           ((ModelElement)               getModel()).addPropertyChangeListener( this );       }}當模型屬性(例如座標)發生變化時,它會通知所有的控制器, public void setLocation(Point newLocation) {       if (newLocation == null) {           throw new IllegalArgumentException();       }       location.setLocation(newLocation);       firePropertyChange( LOCATION_PROP , null , location );    }控制就會根據相應的屬性,來重新整理視圖, public void propertyChange(PropertyChangeEvent evt) {       String prop = evt.getPropertyName();             if(AbstractActivity. SIZE_PROP.equals(prop)               ||AbstractActivity. LOCATION_PROP.equals(prop)){           refreshVisuals();       } else if(AbstractActivity. SOURCE_TRANSITIONS_PROP.equals(prop)){           refreshSourceConnections();        } else if(AbstractActivity. TARGET_TRANSITIONS_PROP.equals(prop)){           refreshTargetConnections();       }          }類圖如下:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.