actionscript > 裏所有文章列表
原文
這真是一篇有趣的文章,關於何時該用 singleton 與 static 的問題我也已經想很久。
早期我習慣用 Static class 做為中央儲存地(dump site ?),例如把utility methods, prop, constant 都塞在裏面,這樣方便存取。
但在 flex 2 早期的幾個版本裏,static class無法透過 binding 整合到 view去,再加上 Cairngorm 2 出來後 ModelLocator 一律採用 singleton設計,那時究其原因也是為了解決 static prop/method 無法 binding 的問題。
正當我們想全面轉換成 singleton時,flex 2 beta 2 出來了,adobe 很勤快的解決了 static prop binding issue,所以之前的老方法又可以繼續使用。
這下子就陷入兩難,需要在兩者間做點選擇:到底該繼續用 static class就好?或是follow Cairngorm 的 singleton ? 當然後來我們已經有了答案,但先來看看這篇文章講了什麼。
這篇文章的基本要意就是: singleton 的彈性比較大,在可能的情況下應該儘量用 singleton而非 static.
主要的 rationale 如下:
1、singleton 的彈性來自於它可兼俱 Factory 的性質,例如 getInstance()也可視為一個 factory method 動態的產生物件(甚至是傳回一個 Abstract Factory),然後透過『多型』就可以輕鬆的置換許多 method 的功能,彈性與威力無窮。
2、singleton class 可以 extends 與 implement 其它class,但 static class 不行。
3、singleton 是 statefull,如果需要維持 state,用 singleton會比較方便。
另外,文章中也說明了選擇時的判斷條件:
1、如果是靜態不會改變的東西,例如 String utility (parse, sprintf…) 就很適合放在 static class裏,而此時它的用途就跟以前的 _global 沒太大差別,這也是colin moock 在 EAS2 中建議的方法。
2、如果是未來可能會改變的東西,放 singleton class會比較好,因為統一透過 getInstance()取得 reference後的操作行為都是一樣的,因此將來business logic 要改只要在 getInstance()動手腳傳回相容的介面即可。
這兩點也是我們後來選擇 singleton 時主要的依據,用到現在覺得還挺方便,沒有什麼大問題。
| by admin
- 使用 Flex Builder 建立 AS3 project
- 使用 FB2 開發、編譯與除錯程式
- AS3的全新 Class架構 與 繼承順序 簡介
- AS3新增 – Package 簡介
- AS3新增 – flash.display 與 flash.geom
- AS3新增 – DisplayList
- AS3應用範例 – 使用 DisplayList 建立文字框與顯示於畫面
- AS3新增 – Sprite (MovieClip is not the only choice anymore)
- AS3新增關鍵字 internal, public, protected 以及 private keyword的消失
- AS3應用範例 – 如何建立 Singleton class (在沒有 private class 的情況下)
- AS3新增關鍵字 override, const
- AS3應用範例 – 如何 繼承 並 override 一個 class
- AS3全新的 Event 架構(多個 Event Class, Event Bubbling, Event Stages, Event Scope)
- AS3應用範例 – 如何讓自製 class 擁有廣播事件能力?
- AS3應用範例 – 如何客製化 Event Class (subclassing Event)
- AS3新增 – 方便好用的 E4X !
- AS3新增 – Timer, setTimeout class
- 如何載入外部檔案(圖片、動畫與文字)
- AS3新增資料型態: int, uint, – , void
- undefined 與 null 的改變與使用注意事項
- AS3新增 – drawing 管理介面 – graphics API
- AS3新增 – fucntion可接多重參數 …args 的應用
- AS3新增 – Regular Expressions
- AS3新增 – Object Proxy 的萬用功能介紹 (__resolve__)
- AS3應用範例 – 如何使用 Loader 載入外部檔案並偵聽訊息
- try, catch, throw, finally 的使用
- Flash Player sandbox security 注意事項(stand alone 程式與 web app)
時間: 台北部份將分別在五、六、七月各一場 (新竹、高雄規畫中)
地點: 台北、新竹、高雄 恆逸資訊教室
費用: 未定(請洽恆逸資訊)
crash course – AS3 (2006 六月九日)
crash course – Flex 2 (2006 五月四日)
crash course – Flash Media Server 2 (2006 七月六日)
| by admin
ActionScript 2.0 Best Practices (單頁方便列印版)
正在想如何重新改寫教材,現在問題解決一半了 Orz
只是現在才推這篇文章有沒有太慢了點,AS3 is right at the not so far corner…
| by admin
範例下載
在flash 裏要產生 modal window(只有前景的視窗可操作,背景所有東西都不能按)有兩種方式,一種是用 PopUpManager,另一種是用 Alert.create()。
一般正常用法是先透過 PopUpManager 產生一個 Window 元件,然後再用 Window.contentPath = xxx 將自已的東西放進去。
但這個做法有個缺點,如果你不想要那個固定格式(灰底 + titlebar)的視窗,就要很辛苦的動點手腳重新 skinning。
最近有個案子又需要這種功能,但設計師(hi Brad!)需要用自已的mc視窗,因此我寫了個小工具可以隨意指定自製的mc 成為 modal window, 原理其實很簡單,就是把 mx.managers.PopUpManager 打開讀完一遍懂了後就知道,讀完後就會知道其實 adobe 的工程師已經寫好許多方便的小程式等者被用,例如
1. DepthManager 裏面有 setDepthBelow(), createChildAtDepth()等程式可用
2. 這些 Manager都會隨者 Window 元件一起以 mixins 的方式加MovieClip身上。
如果你沒時間再走一遍整個流程,看看這個超短簡介也可以,基本上產生一個modal window的過程如下:
1、先產生一片超大的白色mc把整個畫面(Stage size)蓋住,然後在它身上吃掉所有的 mouse click event。
2、用 setDepthBelow() 將剛才產生的白底mc 移到 自製mc 的下方,這支程式會很聰明的將 自製mc 移到剛才 白色mc的上一層。
Actionscript:
-
/*
-
usage:
-
@parent: 以那個mc為基準建立 modal window
-
@mc: 要成為 modal window的視窗
-
@alpha: 背景的透明度,預設 50%
-
@color: 背景的顏色,預設 白色
-
@released under creative commons 2.5, richtechmedia.com
-
*/
-
function createModal(parent:MovieClip, mc:MovieClip, alpha:Number, color:Number){
-
var modal:MovieClip = parent.createChildAtDepth("modal", DepthManager.kTopmost);
-
modal.setDepthBelow(mc);
-
mc.modal = modal;
-
//
-
modal.resize = function(){
-
modal._width = Stage.width;
-
modal._height = Stage.height;
-
}
-
//
-
modal._alpha = (alpha)?alpha:50;
-
modal.resize();
-
modal.onRelease = undefined;
-
modal.useHandCursor = false;
-
//變顏色
-
if(color){
-
co = new Color(modal);
-
co.setRGB(color);
-
}
-
}
至於關掉也很簡單
Actionscript:
-
function closeModal(o:MovieClip, _modal) {
-
//trace("closeModal mc> " + o + " modal : " + _modal);
-
_modal.swapDepths(findNextAvailableDepth(0,_root,"up"));
-
_modal.removeMovieClip();
-
//
-
o.swapDepths(findNextAvailableDepth(0,_root,"up"));
-
o.removeMovieClip();
-
}
| by admin
amfphp的作者Patrick Mineault 今天貼了一篇關於 FMS2回傳 recordset的文章。
主要重點是當資料流向是 amfphp -> FMS2 -> flash player 時,
FMS2 與 flash player 分別會建立新的 recordset 物件來承載這些 resultset,但在兩次的轉換過程中,recordset.items 這個 getter 會被混謠,導致最後在 flash player裏用 recordset.items 是讀不到資料的。
之前我也曾大量使用類似這樣的三階式流程,但從來沒試過將 resultset 先傳回 flashcom 再丟回 flash player, 比較常見的劇情是 resultset (例如會員資料)傳到 flashcom後就留在那裏,所以不曾碰過patrick的這個問題,但將來顯然有機會碰到所以先記一筆備用。
不過,recordset 是一個已經正式宣告死亡的東西(不論在 AS3 或 Flex 2裏),所以最安全保險的做法就是自已先在server端生成 array of objects 再回傳,這樣不論要傳幾階都保証可久放不變質
| by admin
Previous Posts