## 一、簡單工廠
簡單工廠是面向對象編程的起步設計模式,用到面向對象設計的三大特性:封裝,繼承,多態來進行設計是必須的。
封裝:使業務邏輯和界面邏輯分離,做到代碼復用,而不是復制。
繼承:將在同一類中進行的邏輯操作,抽象出一個類或者接口,統一定義,通過子類進行不同的實現。這樣對象之間的修改就變得獨立,不會影響到其他類,降低了對象間的耦合。
多態:通過給同類Things定義接口或抽象類,由子類繼承實現統一父類方法,但不同的子類又有不同實現,將繼承和多態演繹完成。
1、簡單工廠解決的問題
原來這些業務都在同一個類中,我們通過傳入參數,來判斷具體調用哪個函數,現在我們把這些類都一個個獨立封裝起來,問題出現了,
我們應該怎樣從客戶端調用具體要實現的業務邏輯類呢???
這時候該簡單工廠上場了。在工廠中根據客戶端傳入參數來決定要實例化的對象。
定義一個工廠類,負責創建實例過程。通過這個工廠,我們將客戶端和業務邏輯類進行聯系。
當然作為聯系者,當然定義中就要需要知道所有的業務邏輯類,所以在類圖中,你會發現是工廠類依賴邏輯類哦!
**2、類圖**

## 二、工廠模式
1、工廠模式
工廠方法模式:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
2、工廠模式的出現
簡單工廠模式通過一個工廠類實現了客戶端對具體調用類的實例化。那么大家都知道簡單工廠中的工廠類是通過客戶端傳入參數,由條件語句進行判斷后決定實例化哪個類的。那是不是您也有這樣的疑問呢?面向對象技術要做到盡可能的封裝性好,一個類修改,增刪,不影響到其他類。那在簡單工廠模式中,工廠類中要修改或增加一個操作,都必須打開這個工廠類,那么工廠類中的所有運算我就可以一覽無遺了,是不是這里就封裝不嚴了呢?
工廠類封裝不嚴怎么辦?
還是由簡單模式的二姐(還有大姐哦),工廠模式來給她完善吧!
工廠模式將面向對象理解的很到位,既然封裝不嚴,那么我們就給抽象工廠也分出一個層次了來,抽象出一個接口,然后把這些分支判斷語句轉換成一個個小的子類來實現工廠接口。是不是跟業務邏輯的封裝是如出一轍呢?
這樣我們就把原來需要再工廠類中要判斷的條件語句轉移到客戶端,雖然還得判斷需要實例化哪個,但是這些都是跟界面打交道的代碼,我們都放在客戶端中處理,不會影響到內層業務,且以后要增加運算,我們只需增加運算類,對應的指向運算類的工廠,不會干擾到其他類,這樣的業務結構是牢固的,我們所期待的。
3、類圖

## 三、抽象工廠
詳情請見上篇博客:[抽象工廠](http://blog.csdn.net/wangyongxia921/article/details/8432186)。
[作者信息](http://wyx-921.blog.163.com/)
- 前言
- 抽象工廠——創建型設計模式一
- 工廠三姐妹——創建型設計模式之二
- 初識面向對象設計模式
- 建造者模式——創建型模式之三
- 原型模式——創建型設計模式四
- 適配器 and 組合模式——結構性模式之一
- 橋接模式——結構性設計模式之二
- 組合模式——結構型設計模式之三
- 裝飾模式——結構型設計模式之四
- 外觀模式——結構型設計模式之五
- 代理模式——結構型設計模式之六
- 觀察者模式——行為型設計模式之五
- 模板設計——行為設計模式之一
- 命令模式——行為設計模式之二
- 狀態模式——行為型設計模式之三
- 職責模式——行為設計模式之四
- 中介模式——行為模式之六
- 策略+簡單工廠 實戰篇
- 看觀察者怎么全方位觀察機房收費系統
- 登陸也需要裝飾——機房收費系統裝飾模式實戰
- 何為抽象?你有本末倒置嗎?
- 再回首,策略、簡單工廠是否依然?
- 再回首——行為型設計模式