PIXNET Logo登入

流風羽的部落格

跳到主文

歡迎光臨流風羽在痞客邦的小天地

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 6月 08 週五 201210:47
  • [Design Pattern] IoC / DI


通常在程式撰寫上,若要由A呼叫B,通常都是直接以"主動"的方式去呼叫。

 

A     →     B

  主動建立

 

在這結構中過程中加入IoC/DI容器,會變得如何?(注意箭頭方向)

 

A     ←     IoC/DI Container     →     B

     被動

 

此時A取得B instance時是採被動方式,由IoC/DI Container先取得B instance再植入A。

 

IoC及DI,其實只是針對同一件事情,以不同的角度去描述。

 
IoC  
-- Inversion Control          (控制反轉)

容器控制應用程式,由容器反向的向應用程式植入其所需的外部資源。

 

DI     -- Dependency Injection    (相依植入)

應用程式建立相依容器且植入所需的外部資源。

 

IoC/DI Container,可有效分離物件和其所需要的外部資源,使它們鬆散耦合,亦有利於功能重用,更使得程式整個體系結構變得更加靈活。

 



以下為IoC/DI程式範例

 

public class A {

     //等待被植入

     private B b = null ;

     //植入資源B

     public void setB(B b) {

         this.b = b;

     }

    

     public void t1() {

         //此時要使用b,但不主動去建立,直接呼叫使用。

        b.tc();

     }

}



public interface B {

     public void tc();

}

 

由此程式碼可見,A要使用B時,需等待instance被植入,此範例就不實作IoC/DI Container。





(繼續閱讀...)
文章標籤

流風羽 發表在 痞客邦 留言(0) 人氣(585)

  • 個人分類:Design Pattern
▲top
  • 6月 06 週三 201221:11
  • [Design Pattern] 懶惰式 v.s. 飢餓式

程式在撰寫的過程中,如何善用資源是非常重要的事情。
 
以下就拿Singleton(單例模式) Class各別以"懶惰式"及"飢餓式"的寫法來做個比較。
 
所謂懶惰式,就是要用到時才會去建立instance,如以下程式碼。
 
public class Singleton {
    private static Singleton instance = null ;
    private Singleton () {
    }
    
    public static Singleton getInstance () {
         //判斷instance變數是否有值。
         if(instance == null ) {
             //若無,則建立一class instance並assigne給instance變數。
            instance = new Singleton();
         }
         //若有值,則直接回傳。
         return instance;
    }
}


以上可見,instance是在client呼叫getInstance method才會判斷是否有值,若無值才會建立instance,此種採被動的方式稱為懶惰式。
 
以下為飢餓式的寫法。
 
 public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton () {
    }
    
    public static Singleton getInstance () {
         //直接回傳instance。
         return instance;
    }
}
 
之所以會稱為飢餓式,是因為此instance是static變數,故在類別載入時就會進行初始化,即立即產生一個instance,即為主動的方式。
 
以上,懶惰式實現了Lazy Load,也就是延遲載入的概念,這是在實際開發中很常見的思想,盡量節省資源使用;而飢餓式是在類別載入時立即建立instance;以上,為這兩種開發方式的介紹,可視情況擇一使用。
 
(繼續閱讀...)
文章標籤

流風羽 發表在 痞客邦 留言(0) 人氣(177)

  • 個人分類:Design Pattern
▲top
  • 6月 01 週五 201210:40
  • [Design Pattern] 外觀模式 v.s. 仲介者模式


由於這兩個模式非常相似,不過卻有著基本區別。

 

外觀模式

1. 主要的封裝模式是單向的互動,只有從用戶端存取系統的呼叫,沒有從系統中存取用戶端的呼叫。

2. 一般是"組合呼叫"或是"轉調"內部實現的功能,通常本身並不實現這些功能。

3. 主要目的是為了簡化用戶端的呼叫。

 

仲介者模式

1. 主要用來封裝多個物件之間相互的"互動",多用於系統內部的多個模組之間。

2. 必須實現實際互動功能。

3. 主要目的是鬆散多個模組之間的耦合,將這些偶合關係全放到仲介者模式中實現。


(繼續閱讀...)
文章標籤

流風羽 發表在 痞客邦 留言(0) 人氣(230)

  • 個人分類:Design Pattern
▲top
1

部落格廣告

部落格廣告

個人資訊

流風羽
暱稱:
流風羽
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (12,165)[SQL Server] 解決資料庫還原版本向下相容的問題
  • (3,569)[Javascript] 引用外部 js 檔時利用屬性傳遞參數
  • (1,825)[.NET MVC] 使用多國語系
  • (776)度分秒 轉換成 經緯度
  • (685)jQuery Plugin ColorBox 自訂關閉
  • (652)不須 Google 密鑰使用 Google AJAX Search API
  • (403)將點陣列轉為 Geometry 資料
  • (282)HTML5 Canvas 範例(繪製影像)

文章分類

toggle Technology (30)
  • jQuery (2)
  • HTML5 (9)
  • Oracle Spatial (6)
  • Android (3)
  • PHP (2)
  • IIS (2)
  • Google API (3)
  • MapServer (4)
  • ASP.NET (11)
  • iOS (1)
  • OpenLayers (3)
  • Flex (13)
  • Eclipse (2)
  • Oracle (6)
  • C# (5)
  • Design Pattern (3)
  • PostgreSQL (3)
  • Python (8)
  • .NET MVC (3)
  • Other (1)
  • DB (1)
  • Javascript (6)
  • Action Script 3 (1)
  • QGIS (7)
  • Linux (2)
  • SQL Server (5)
  • Java (2)
  • VirtualBox (1)
  • Ruby on Rails (2)
  • GIS (3)
  • 未分類文章 (1)

最新文章

  • [SQL Server] 關於 Store Procedure 中使用 sp_executesql 執行 T-SQL 陳述式
  • [.NET Entity Framework] 找不到 Entity Key ???
  • [.NET MVC 4] 使用 ValidateAntiForgery 防止CSRF跨網站請求偽造攻擊
  • [.NET MVC] 使用多國語系
  • [iOS] Create APNs Key for PHP
  • [SQL Server] 解決資料庫還原版本向下相容的問題
  • [Javascript] 引用外部 js 檔時利用屬性傳遞參數
  • [SQL Server] Bak 檔案還原資料庫
  • [Android] 將 Bitmap 轉為指定格式圖片並儲存至 SDCard
  • [Android] 由 Extends View Class 關閉 App

最新留言

  • [17/06/12] 訪客 於文章「Oracle exp & imp 使用方...」留言:
    感謝您的教學...
  • [14/10/24] 小吳 於文章「HTML5 Canvas 範例(繪製圓形...」留言:
    借我複製玩玩喔,謝謝...
  • [14/07/01] 訪客 於文章「將 .ui 佈局檔轉換成 .py Pyt...」留言:
    於 PyQt4 目錄下輸入 pyuic4 -o [outPu...
  • [13/08/20] 路人 於文章「Oracle String 自動補零...」留言:
    是LPAD...
  • [13/03/12] aliceispig 於文章「Flex 等於運算符(==) 及 全等運...」留言:
    === 是代表 型別 值 全都相等 == 是代表值相等 ...
  • [12/10/01] Rami 於文章「利用 QT-Designer 製作程式佈...」留言:
    感謝分享~給了我很大的幫助~...
  • [12/02/20] 初學者 於文章「Flex 下載檔案...」留言:
    請問我要如何呼叫這段程式...
  • [11/09/09] 家豪 陳 於文章「建立 Oracle Spatial Ge...」留言:
    我要給你訂正一下 標題的 Special 是錯誤的........
  • [11/09/01] 楊哲偉 於文章「Flex 使用 POST 傳值...」留言:
    您好,我是FLEX的新手 看完這段程式有些問題想問 其中va...

文章精選

文章搜尋

參觀人氣

  • 本日人氣:
  • 累積人氣: