1. 程式人生 > >面向對象編程思想-簡單工廠模式

面向對象編程思想-簡單工廠模式

htm using 希望 耦合度 www 生活 html 組織 cto

一、引言

簡單工廠、工廠方法、抽象工廠模式都屬於設計模式中的創建型設計模式,它們幫助我們把對象的實例化部分抽取出來,進而優化系統架構,提高系統的擴展性。本文介紹一個比較容易理解的模式-簡單工廠模式。

二、簡單工廠模式

定義:“工廠”?!看到這個詞語,在現實生活中大家會想到是生產產品的,同樣,在簡單工廠模式裏大家可以理解為工廠其實就是創建對象的一個類。平時我們編程的時候,當使用“new”創建對象時,此類就增加了對該對象的依賴,它們之間的耦合度就增加了,這樣當業務需求變化時,我們就不得不去修改此類的源碼。在程序設計中,我們可以用“封裝改變”的原則,把對象的創建部分抽取出來,去解決此類對該對象的依賴問題。這就用到“簡單工廠模式”。下面通過一個例子,幫助理解簡單工廠模式

在現實生活中,我們都會開著車去上班,比如周一開奔馳去上班,周二想開寶馬去上班,可是我們車庫裏沒有寶馬怎麽辦???這時,其實辦法還是有的,我們可以通過滴滴打車,叫一輛專車寶馬載著我們去上班,這樣我們就解決了我們沒有寶馬的問題,直接消費產品就可以了,不需要關註買車的問題。

下面是代碼demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{
//奔馳類
class MBZ : BaseCar {
public override void Run() { Console.WriteLine("我今天開{0}去上班", this.GetType().Name); } } }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{  
  //寶馬類
class BMW : BaseCar { public
override void Run() { Console.WriteLine("我今天開{0}去上班", this.GetType().Name); } } }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{
  //車子抽象類
public abstract class BaseCar {
    //我今天開什麽類型的車去上班
public abstract void Run(); } }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{
  //簡單工廠類 負責提供車,即車工廠相當於滴滴打車的平臺,傳入類型相當於你叫的什麽類型的車
class CarFactory { public static BaseCar GetCar(CarType cartype) { BaseCar car = null; switch (cartype) { case CarType.MBZ: car = new MBZ(); break; case CarType.BMW: car = new BMW(); break; default: throw new Exception(string.Format("暫時不提供{0}", cartype)); } return car; } public enum CarType { MBZ, BMW } } }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DNA.Framework.SimpleFactory
{
   //我們相當於客戶端,負責調用簡單工廠生產對象
class Program { static void Main(string[] args) { BaseCar bmw = CarFactory.GetCar(CarFactory.CarType.BMW); BaseCar mbz = CarFactory.GetCar(CarFactory.CarType.MBZ); bmw.Run(); mbz.Run(); Console.Read(); } } }

優點:比起平時的直接“new”生產對象

1.簡單工廠解決了客戶端與對象的直接依賴,消除客戶端直接創建對象責任,實現客戶端只需要關註消費產品就可以了,實現責任的分割。

2.代碼復用性增高,這樣不僅我打車時不需要關註車庫中有沒有想坐的車,其他人一樣也可以直接消費產品就可以了,把創建車的事情交給了滴滴打車。

缺點:

1.工廠類集中了所有產品的創建,職責過重,工廠類如果不能運行了,整個系統都會受到影響。

2.不利於代碼擴展,一旦增加新的消費產品,就需要修改工廠類,工廠類會越來越復雜。

適用場景:工廠類創建對象較少時;客戶知道傳入工廠參數,不需要關註對象創建邏輯時。

關於簡單工廠模式的學習就到此結束了,哇,已經這麽晚了,寫博客真的很重要,這個可能只有做了得人才知道,需要鍛煉一個人的語言組織能力,執行力,對知識的掌握紮實度的考驗等等。本文是筆者對知識的鞏固,當然也希望能幫到他人,若有不足地方,歡迎斧正,感謝您的閱讀。

參考:http://www.cnblogs.com/zhili/p/SimpleFactory.html

面向對象編程思想-簡單工廠模式