Egret開發筆記 七 解耦方式之,掛接解耦

2021-09-28 12:09:41 字數 2508 閱讀 5657

需求

首先,需求是這樣的。戰鬥結算介面(就是戰鬥結束後會有乙個介面顯示這場戰鬥的得失)要顯示一些東西。

這些東西並不是固定的,比如,今天有可能要顯示「國慶快樂」,明天又是要顯示一幅圖。

此處將會舉例顯示乙個元件,因為元件上可以放任何你需要顯示的東西。

難點如果需要顯示什麼,就手動在這個介面上,加什麼。那麼後面要改變的時候,也同樣需要手動修改。甚至如果不需要顯示的時候,還要手動刪除,這樣的維護成本很高。

so思路

寫乙個介面 inte***ce iresultadd ,這個介面有兩個方法,乙個是 update() 方法,這個方法就是當戰鬥結算介面出現的時呼叫,還有乙個方法是 onpageremoved() 方法,這個方法是當戰鬥結算介面要關閉的時候呼叫的

需要在戰鬥介面顯示東西的類,就要來實現這個介面,在 update() 方法中將自己需要新增的東西新增進去,所以這個方法是需要引數的,其中乙個引數就是戰鬥結算介面 combatresultui,將戰鬥結算介面傳進來,就可以隨心所欲在上面新增東西,當然有時候還需要知道一些其他的東西,比如戰鬥勝負,我們需要通過勝負新增不同的東西。所以介面類應該這麼寫

inte***ce

iresultadd

3.戰鬥結算介面要持有乙個 iresultadd 陣列,因為有可能同時有多個地方在戰鬥結算時要新增顯示。當戰鬥結算介面出現時遍歷 iresultadd 陣列,呼叫每乙個 update() 方法,並將自身傳遞過去,以及相關資料 p_data。當戰鬥結算介面即將關閉的時候再依次呼叫 onpageremove() 方法即可

4.戰鬥結算介面需要維護這個 iresultadd 陣列,得有新增陣列元素以及移除陣列元素的方法。

//iresultadd 陣列,所有需要在戰鬥結算時顯示東西的類都新增到這個陣列

private

static _addlist: iresultadd=

;//掛接方法,新增進陣列的方法

//引數就是實現了 iresultadd 介面的那個類

public

static

addhooklist

(hookclass: iresultadd)

:void

//有新增的方法就要有移除的方法

public

static

removehooklist

(hookclass: iresultadd)

:void

實現

那麼這個三個類應該有如下**

介面類 iresultadd

inte***ce

iresultadd

戰鬥結算介面 combatresultui

class

combatresultui

//當戰鬥結算介面更新時,會呼叫此方法

public

updateview()

}//當戰鬥結算介面即將關閉時,會呼叫此方法

public

dispose()

}//iresultadd 陣列,所有需要在戰鬥結算時顯示東西的類都新增到這個陣列

private

static _addlist: iresultadd=

;//掛接方法,新增進陣列的方法

//引數就是實現了 iresultadd 介面的那個類

public

static

addhooklist

(hookclass: iresultadd)

:void

//有新增的方法就要有移除的方法

public

static

removehooklist

(hookclass: iresultadd)

:void

}

需要在戰鬥結算介面新增東西的類,user

class

user

implements

iresultadd

//實現介面

//戰鬥結算介面會呼叫此方法,並將自身傳過來

update

(p_reswin:combatresultui,p_data:any)

:void

onpageremoved()

:void

}

最後一步,誰來掛接

什麼時候需要掛接上去了,就什麼時候掛接,這就很松了,要取消掛接也有對應的方法,就很舒服。

class

hanger1

dispose()

:void

private _user1: user =

newuser()

;}class

hanger2

dispose()

:void

private _user2: user =

newuser()

;}

Egret 開發筆記 三 多按鈕註冊監聽

首先在 ui 面板的父類uibase中寫下這些方法 protected buttonlist array 註冊按鈕 在onclick裡面,判斷按鈕的名字以區分點的是哪個按鈕 protected registerbuttons container fairygui.gcomponent null vo...

開發筆記之20140121

關於try catch語句和finally語句塊 自 try語句在返回前,將其他所有的操作執行完,保留好要返回的值,而後轉入執行finally中的語句,而後分為以下三種情況 情況一 如果finally中有return語句,則會將try中的return語句 覆蓋 掉,直接執行finally中的retu...

開發筆記之20140220

1.工廠模式中簡單工廠模式就是建立乙個工廠,在工廠裡根據引數建立相應型別的物件,這樣就可以把建立物件的工作集中在工廠中執行,利用抽象產品角色宣告產品,可以將各類產品的共有方法提取出來在抽象產品角色中宣告。簡單工廠模式的缺點是靈活性不足,如果新加入一種型別則需要修改工廠類,新新增一條建立例項物件的邏輯...