1. 程式人生 > >iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)

iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)

csdn bst 設計 cto mod 基類 load 引用 角色

1. 簡單工廠模式


怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式?

簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的煎餅。

該場景相應的UML圖例如以下所看到的:

技術分享

圖1:簡單工廠模式UML圖


簡單工廠模式的參與者:

工廠(Factory)角色:接受client的請求,通過請求負責創建對應的產品對象。

抽象產品(Abstract Product)角色:是工廠模式所創建對象的父類或是共有的接口。但是抽象類或接口。

詳細產品(ConcreteProduct)對象:工廠模式所創建的對象都是這個角色的實例。

簡單工廠模式的演變:

1.當系統中僅僅有唯一的產品時,能夠省略抽象產品,如圖1所看到的。這樣。工廠角色與詳細產品能夠合並。

簡單工廠模式的優缺點:

1.)工廠類含有必要的創建何種產品的邏輯。這樣client僅僅須要請求須要的產品,而不須要理會產品的實現細節。

2.)工廠類僅僅有一個,它集中了全部產品創建的邏輯。它將是整個系統的瓶頸,同一時候造成系統難以拓展。

3.)簡單工廠模式通常使用靜態工廠方法,這使得工廠類無法由子類繼承,這使得工廠角色無法形成基於繼承的等級結構。


2. 工廠方法模式

工廠方法使用OOP的多態性,將工廠和產品都抽象出一個基類,在基類中定義統一的接口。然後在詳細的工廠中創建詳細的產品。工廠方法的生活場景,聯合利華要生產“夏士蓮”和“清揚

兩款洗發水,它會建一個生產“夏士蓮的工廠和一個生產“清揚的工廠。

技術分享

圖2:工廠方法的UML圖

工廠方法模式中的參與者:

抽象工廠角色:與應用程序無關,不論什麽在模式中創建對象的工廠必須實現這個接口。


詳細工廠角色:實現了抽象工廠接口的詳細類。含有與引用密切相關的邏輯,而且受到應用程序的調用以創建產品對象。
抽象產品角色:工廠方法所創建產品對象的超類型,也就是產品對象的共同父類或共有的接口。
詳細產品角色:這個角色實現了抽象產品角色所聲名的接口。工廠方法所創建的每一個詳細產品對象都是某個詳細產品角色的實例。

工廠方法的優缺點:

1.減少了工廠類的內聚。滿足了類之間的層次關系,又非常好的符合了面向對象設計中的單一職責原則。這樣有利於程序的拓展。如圖三所看到的:

技術分享
圖3:工廠方法的拓展UML圖

總結:共性提取出來,依據各自的個性建立各自的繼承共性的實現


3. 抽象工廠設計模式

所謂抽象工廠是指一個工廠等級結構能夠創建出分屬於不同產品等級結構的一個產品族中的全部對象。以創建Unix控件和Windows控件為例說明。我們須要一個抽象工廠以下有兩個子工廠,一個叫做UnixFactory,用於生產Unix族控件,一個叫做WinFactory,用於生產Win族控件。抽象工廠與工廠方法的差別是,工廠方法中的詳細工廠一般僅僅生產一個或幾個控件對象,而抽象工廠中的詳細工廠生產的是一族控件對象。

如圖4所看到的。

技術分享

圖4:抽象工廠設計模式UML圖


抽象工廠中的參與者:

抽象工廠(Abstract Factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。

詳細工廠(Concrete Factory)角色:這個角色直接在client的調用下創建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。

抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共有的接口。

詳細產品(Concrete Product)角色:抽象工廠模式所創建的不論什麽產品對象都是某一個詳細產品類的實例。

這是client終於須要的東西。其內部一定充滿了應用系統的商業邏輯。

抽象工廠的使用場景:

  • 一個系統不應當依賴於產品類實例怎樣被創建、組合和表達的細節,這對於全部形態的工廠模式都是重要的。
  • 這個系統有多於一個的產品族,而系統僅僅消費當中某一產品族。
  • 同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
  • 系統提供一個產品類的庫,全部的產品以相同的接口出現。從而使client不依賴於實現。

抽象工廠模式與工廠方法模式的差別

工廠方法模式:每一個抽象產品派生多個詳細產品類,每一個抽象工廠類派生多個詳細工廠類,每一個詳細工廠類負責一個詳細產品的實例創建;
抽象工廠模式:每一個抽象產品派生多個詳細產品類。每一個抽象工廠派生多個詳細工廠類,每一個詳細工廠負責多個(一系列)詳細產品的實例創建。



//在UIKit框架下,我們用工廠方法和抽象工廠兩種設計模式分別實現了兩份Demo, 不理解兩種設計模式該怎樣實現的朋友能夠到這裏下載:


抽象工廠: http://download.csdn.net/detail/luozhonglan/8008001

工廠方法: http://download.csdn.net/detail/luozhonglan/8007973



參考文章:

簡單工廠: http://blog.csdn.net/z251257144/article/details/7476849

工廠方法:http://blog.csdn.net/z251257144/article/details/7479183

抽象工廠:http://blog.csdn.net/z251257144/article/details/7482810




iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)