1. 程式人生 > >一個例子穿插三種不同的工廠模式形態

一個例子穿插三種不同的工廠模式形態

1、簡單工廠模式

工廠類根據提供給它的引數,返回的是幾個產品中的一個類的例項。通常情況下,它返回的是一個公共的父類,在這個工廠類裡面,父類的引用指向子類的物件

廠長生產杯子時先不讓生產線知道我要產的是玻璃的還是瓷的,而是讓它在不知道具體材料的情況下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形狀的具體杯子了。所以就有了簡單工廠模式。

<span style="font-size:14px;">  class CupFactory
    {
        public static CUP CreateCup(string 種類)
        {
            杯子 cup = null;
            switch (種類)
            {
                case “玻璃杯":
                    {
                        cup = new GlassCup();
                        break;
                    }
                case “陶瓷杯":
                    {
                        cup = new ChinaCup();
                        break;
                    }
            }
            return cup;
        }
    }
</span>
<span style="font-size:14px;"> static void Main(string[] args)
        {
            杯子 cup;
            cup = CupFactory.CreateCup(種類);
        }
</span>


2、工廠方法模式

          定義一個用於建立產品物件的工廠的介面,而將實際建立工作放在工廠介面的子類中。

  簡單工廠模式有一個問題,就是當我現在想生產一個同樣形狀的鐵杯時,工廠裡並沒有定義相應的處理流程,只能更改CreateCup方法,這就不合理了(違背封閉原則)。
       我現在只是想生產鐵杯,你只要在最後的時候把玻璃原料換成鐵的不就行了嗎,幹嘛還要更改整條生產線呢?於是就有了工廠模式。

   static void Main(string[] args)
        {
             IFactory CupFactory = new 鐵杯子factory();
             Cup cup = CupFactory.CreateCUP();
        }


3、抽象工廠模式

 用來建立產品族

假如現在工廠主想要生產水壺(kettle),用工廠模式就不得不再造一條水壺生產線,能不能在水杯生產線同時生產水壺呢?這就是抽象工廠模式。在原CupFactory中加一個CreateKettle()方法,用來生產水壺。


總結:

簡單工廠模式:用來生產同一等級中的任意產品(不支援增加新產品

)。產品具體構造細節是在一個個if/else分支,或者在switch/case分支裡面的。如果要增加一個產品,則需要修改工廠類,增加if/else分支,或者增加一個case分支。

工廠方法模式:用來生產同一等級結構中的固定產品(支援增加新產品)。將工廠和產品之間的耦合降低,將具體產品的構造過程放在了具體工廠類裡面。在以後擴充套件產品的時候方便很多,只需要新增一個工廠類,一個產品類,就能方便的新增產品,而不需要修改原有的程式碼。該模式更符合開發中的OCP原則(open close principle),對擴充套件開放,對修改關閉。
        一個抽象產品類,可以派生出多個具體產品類。
        一個抽象工廠類,可以派生出多個具體工廠類。

抽象工廠模式:用來生產不同產品族的全部產品(不支援產品增加,但支援產品族的增加)
        多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
        一個抽象工廠類,可以派生出多個具體工廠類。
        每個具體工廠類可以建立多個具體產品類的例項。

相關推薦

一個例子穿插不同工廠模式形態

1、簡單工廠模式 工廠類根據提供給它的引數,返回的是幾個產品中的一個類的例項。通常情況下,它返回的是一個公共的父類,在這個工廠類裡面,父類的引用指向子類的物件 廠長生產杯子時先不讓生產線知道我要產的

shell指令碼中呼叫另一個指令碼的不同方法

1、fork (fork /directory/script.sh) fork是最普通的, 就是直接在腳本里面用/directory/script.sh來呼叫script.sh這個指令碼. 執行的時候開一個sub-shell執行呼叫的指令碼,sub-she

在shell指令碼中呼叫另一個指令碼的不同方法(fork, exec, source)

fork fork(fork /directory/script.sh)如果shell中包含執行命令,那麼子命令並不影響父級的命令,在子命令執行完後再執行父級命令。子級的環境變數不會影響到父級。 fork是最普通的, 就是直接在腳本里面用/directory

清雲小程式教你:如何區分定製型、模板型、SAAS不同開發模式?

問:怎麼區分小程式定製開發、模板、SAAS三種不同開發模式? 答:這是三種不同的開發模式,各有優點,和各有缺點,成本也大不相同,沒有絕對優劣,關鍵是看那種模式適合而已。 定製開發: 定義:顧名思義,就是完全按照你的需求給你定製。特點是可以給到原始碼,獨立部署

shell指令碼中呼叫另一個指令碼的不同方法(fork, exec, source)

fork ( /directory/script.sh) fork是最普通的, 就是直接在腳本里面用/directory/script.sh來呼叫script.sh這個指令碼. 執行的時候開一個sub-shell執行呼叫的指令碼,sub-shell執行的時候, pa

設計模式工廠模式---物件的例項化部分提取出來---不同的提取方法

一、不使用工廠 披薩專案:要方便披薩品種的擴充套件、要便於維護、要能執行時擴充套件 披薩族的設計: 抽象Pizza類,有四個方法:prepare()、bake(),cut(),box() 實際的披薩:GreekPizza和CheesePizza 披薩工廠設計:

python編程(python開發的運行模式)【轉】

阻塞 data tail 驗證 目錄 pro 什麽 read bus 轉自:http://blog.csdn.net/feixiaoxing/article/details/53980886 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 目錄(?)[-]

同一功能不同實現方式你選哪個

img com png 指令 con 段落 gin 表示 alt 例題一枚:在input框中輸入內容,會相應的顯示在下面的div中的不同做法: <!DOCTYPE html> <html> <head> &

PLSQL中的參數模式IN、OUT、IN OUT

代碼 問題 ima .cn lang 傳遞 repl 一個 lin 1、IN模式 IN模式是參數的默認模式,這種模式就是在程序運行的時候已經具有值,在程序體中值不會改變。 錯誤例子: 1 create or replace procedure in_proc ( 2

虛擬機裝Linux的網絡模式

linux p地址 ges com 子網掩碼 host 橋接 主機 src   在通過VMWare裝Linux時,Linux系統需要進行上網或通過SSH進行遠程操作,所以需要進行網絡配置,這裏有三種模式:如下圖      1.橋接模式   此種方式共享宿主機的真實網卡,需要

Linux網絡-vmware網絡模式

程序 數據包 三種網絡模式 png 互聯網 條件 最簡 選項 數據交換 Host-Only 橋接 NAT VMware虛擬機三種聯網方法及原理 一、Brigde——橋接:默

Vmware 虛擬機網絡模式最詳細解說【轉載】

apt con 實現 not ont 管理 網絡連接模式 sysconf 理解 由於Linux目前很熱門,越來越多的人在學習linux,但是買一臺服務放家裏來學習,實在是很浪費。那麽如何解決這個問題?虛擬機軟件是很好的選擇,常用的虛擬機軟件有vmware workstati

VMware Workstations網卡模式

vmware 網卡模式 nat 一、橋接模式就像把電腦網卡當作交換機,虛擬機和win7都直接連到這個交換機上一樣,虛擬機和Windows同網段二、NAT模式就是虛擬機綁定到虛擬網卡上,然後虛擬網卡通過電腦網卡進行NAT方式上網,虛擬機和本地系統不同網段,一般自動選擇NAT模式時,默認選用VM

PDO 中支持錯誤處理模式

測試 語法 nbsp span cat 參數 不執行 處理異常 new PDO 支持三種錯誤處理模式: 靜默模式,警告模式,異常模式 靜默模式是默認的,需要修改的話,通過設置 PDO 對象的屬性完成。 $pdo->setAttribute(PDO::ATTR_ERRM

算法-分析不同函數形式

算法三種定義函數的方式 function語句形式 函數直接量形式 通過Function構造函數形式定義函數 比較三種方式定義的區別 function語句 Function構造函數 函數直接量 兼容 完全

設計模式)---抽象工廠模式

ava des 模式 println 5.5 mage test 抽象工廠 urn 1、 簡介:為創建一組相關或相互依賴的對象提供一個接口,無需指定它們的具體類。抽象工廠模式通常是用於創創建一族產品,並且這族產品分不同的等級;不同的具體工廠類生產不同等級的一族產品。 2、

關於虛擬機的網絡模式設置

ref .cn 外部 ipv4 con 清除 最好 環境 三種 1. 橋接 - 虛擬機作為虛擬的獨立終端,並行於物理機,需要對自身IP進行相關配置(這種網絡模式下,最好有外部路由器。由於和物理主機處於同一個子網內,需要設置相同的IP網段,網關即為路由器IP)。2. NAT

FAT、exFat、NTFS不同U盤系統格式

div 授權 最大 長度 都是 機制 sdxc 速度 百度 FAT32: 它是1997年的Windows 95 OSR2,在第二版系統中首次引入的文件系統格式。 優點:它有很好的兼容性,幾乎所有主流系統都能對其格式寫入讀取。 缺點:這種文件格式安全無保障,對於單個文件

一個節點有state

follow 就會 限制 然而 http php ida 沒有 其他 然而對於多個節點,我們如何來實現一致性,這就是分布式一致性的問題。 Raft就是一個實現分布式一致性的協議 下面讓我們來看看它是如何工作的? node介紹: 每一個節點有三種state (1) follo

Vmware虛擬機網絡模式詳解

lin proto 為我 奇怪 ifcfg dhcp服務器 config 啟動系統 ip設置 目錄(?)[+] 原文來自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92ea