第一章 簡單工廠模式

屬于創(chuàng)建型模式谓传,又叫做靜態(tài)工廠方法(Static Factory Method)模式蜈项,但不屬于23種GOF設(shè)計模式之一。
簡單工廠模式是由一個工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例续挟。簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式紧卒,可以理解為是不同工廠模式的一個特殊實(shí)現(xiàn)。

優(yōu)點(diǎn)

工廠類是整個模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對象就可以了诗祸。而不必管這些對象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利跑芳,有利于整個軟件體系結(jié)構(gòu)的優(yōu)化。

缺點(diǎn)

由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯直颅,違反了高內(nèi)聚責(zé)任分配原則博个,將全部創(chuàng)建邏輯集中到了一個工廠類中;它所能創(chuàng)建的類只能是事先考慮到的功偿,如果需要添加新的類坡倔,則就需要改變工廠類了。
當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時候脖含,可能會出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對條件的判斷和對具體產(chǎn)品類型的判斷交錯在一起罪塔,很難避免模塊功能的蔓延,對系統(tǒng)的維護(hù)和擴(kuò)展非常不利养葵;

這些缺點(diǎn)在工廠方法模式中得到了一定的克服征堪。

使用場景

工廠類負(fù)責(zé)創(chuàng)建的對象比較少;
客戶只知道傳入工廠類的參數(shù)关拒,對于如何創(chuàng)建對象(邏輯)不關(guān)心佃蚜;
由于簡單工廠很容易違反高內(nèi)聚責(zé)任分配原則,因此一般只在很簡單的情況下應(yīng)用着绊。

下面寫一個簡單的計算器事例:

簡單工廠.png

以下除Main方法谐算,其他都寫在 DesignPattern.Test1 命名空間

抽象出來的計算方法類
class Operation
    {
        private double _numberA = 0;//在子類中使用
        private double _numberB = 0;//在子類中使用

        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }
        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }
        //父類方法 供子類重寫
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }
繼承Operation類,派生出來的加法類
class OperationAdd:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
繼承Operation類归露,派生出來的減法類
 class OperationSub:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA - NumberB;
            return result;
        }
    }
繼承Operation類洲脂,派生出來的乘法類
class OperationMul:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }
繼承Operation類,派生出來的除法類剧包,
class OperationDiv:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            if (NumberB==0)
            {
                throw new Exception("除數(shù)不能為0");
            }
            result = NumberA / NumberB;
            return result;
        }
    }
計算工廠類恐锦,根據(jù)傳入不同的operate來返回不同的具體運(yùn)算類
class OperationFactory
    {
        public static Operation creatOperation(string operate)
        {
            Operation oper = null;
            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;
            }
            return oper;
        }
    }
在Main方法中運(yùn)行
using System;
using DesignPattern.Test1;  //引用命名空間 要不找不到類

namespace DesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            MainHandle();

            Console.ReadLine();
        }
        //簡單工廠模式
        public static void MainHandle()
        {
            //聲明一個Operation變量
            Operation oper;   
            //根據(jù)()內(nèi)的參數(shù)來實(shí)例化不同的具體運(yùn)算類
            oper = OperationFactory.creatOperation("-");
            oper.NumberA = 7;
            oper.NumberB = 5;
            Console.WriteLine(oper.GetResult());
        }
    }
}

本文章內(nèi)容是通過研讀程杰先生的《大話設(shè)計模式》有感往果,在此致敬程您為此作出的貢獻(xiàn)!R磺Α陕贮!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潘飘,隨后出現(xiàn)的幾起案子肮之,更是在濱河造成了極大的恐慌,老刑警劉巖卜录,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戈擒,死亡現(xiàn)場離奇詭異,居然都是意外死亡暴凑,警方通過查閱死者的電腦和手機(jī)峦甩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門赘来,熙熙樓的掌柜王于貴愁眉苦臉地迎上來现喳,“玉大人,你說我怎么就攤上這事犬辰∴吕椋” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵幌缝,是天一觀的道長灸促。 經(jīng)常有香客問我,道長涵卵,這世上最難降的妖魔是什么浴栽? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮轿偎,結(jié)果婚禮上典鸡,老公的妹妹穿的比我還像新娘。我一直安慰自己坏晦,他們只是感情好萝玷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昆婿,像睡著了一般球碉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仓蛆,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天睁冬,我揣著相機(jī)與錄音,去河邊找鬼看疙。 笑死痴突,一個胖子當(dāng)著我的面吹牛搂蜓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辽装,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帮碰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拾积?” 一聲冷哼從身側(cè)響起殉挽,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓巧,沒想到半個月后斯碌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肛度,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年傻唾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承耿。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡冠骄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出加袋,到底是詐尸還是另有隱情凛辣,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布职烧,位于F島的核電站扁誓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚀之。R本人自食惡果不足惜蝗敢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望足删。 院中可真熱鬧寿谴,春花似錦、人聲如沸壹堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贱纠。三九已至峻厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谆焊,已是汗流浹背惠桃。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辜王。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓劈狐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呐馆。 傳聞我的和親對象是個殘疾皇子肥缔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容