工廠模式 Factory

2021-09-05 22:57:19 字數 2262 閱讀 2334

這是重讀《設計模式》一書的讀書筆記第二篇,主要**工廠模式(factory)

有幾個重點

為什麼需要工廠模式呢?工廠模式要解決的問題是建立物件例項的多變性,乙個典型的例子就是假設我們的應用程式要既能夠使用sql server作為資料庫,也需要支援使用oracle作為資料庫(當然還可能會有其他的資料庫),那麼如何在不修改應用程式的情況下,能讓它自動適用多種資料來源呢?答案就是工廠模式。

工廠模式其實無處不在,而且即便我們自己以前沒有寫過,但至少都用到過了。在.net框架中,很多地方都有工廠模式的影子。

工廠模式的核心是面向介面的程式設計。

工廠模式的另外乙個核心是動態載入型別,也就是通過反射動態載入某個型別的例項。

工廠模式有兩個具體的子模式

工廠方法模式(factory method) ——應用得更加多一些

抽象工廠模式(可以理解為更加複雜一些的場景)——abastract factory

下面有乙個簡單的例項(工廠方法模式:factory method)

using system;

using system.collections.generic;

using system.reflection;

namespace designpatternsample_factory

console.writeline();

console.writeline("使用oracle的資料訪問元件");

dal = factory.getdalinstance("designpatternsample_factory.oracledal");

foreach (var item in dal.getemployee())

console.read();}}

//第一步:定義介面

///

/// 定義乙個資料訪問層的介面,要求所有資料訪問層都實現該介面

///

inte***ce idal

//第二步:定義工廠

class factory

}//第三步:具體實現dal

class sqlserverdal : idal);}

#endregion

}class oracledal : idal);}

#endregion

}}

下面再來看乙個抽象工廠的模式實現的**例子,從**中可以看出,如果工廠需要做一系列的動態化工作,那麼可以考慮抽象工廠模式。

using system;

using system.configuration;

using system.reflection;

namespace designpattern_factory_abstractfactorysample

}#region 介面定義和抽象工廠定義

inte***ce iprofiledal

inte***ce ibusinessdal

abstract

class factory

#endregion

#region 一套簡單的工廠及其實現

class ******factory : factory

public

override ibusinessdal getbusinessdalinstance()

}class ******profiledal : iprofiledal

public

object load(string key)

#endregion

}class ******businessdal : ibusinessdal

#endregion

}#endregion

#region 一套複雜的工廠及其實現

class complexfactory : factory

public

override ibusinessdal getbusinessdalinstance()

}class complexprofiledal : iprofiledal

public

object load(string key)

#endregion

}class complexbusinessdal : ibusinessdal

#endregion

}#endregion

}

factory工廠模式

1.factory模式 兩個重要的功能 1 定義建立物件的介面,封裝了物件的建立 2 使得具體化類的工作延遲到了子類中。factory模式僅僅侷限於一類類 就是說product是一類,有乙個共同的基類 如果我們要為不同類的類提供 乙個物件建立的介面,那就要用abstractfactory了。我們經常...

工廠模式Factory

工廠方法模式完全符合設計模式原則,降低了物件之間的耦合度,而且,工廠方法模式依賴於抽象的架構,將例項化的任務交由了子類實現.比如你想要出門,每次出行你都要根據天氣情況選擇出行方式,如果下雨天,就開自己的私家車,如果晴天就出門坐公車。那麼這裡可以抽取出乙個基類出來。車的基類 public abstra...

Factory 工廠模式

工廠模式有3種。以下的示例 都省略了建構函式與析構函式。一 簡單工廠模式 簡單工廠模式就是只有乙個工廠,所有的產品都有該工廠生產。每一種產品都有乙個對應的type。當需要某種產品時,將該產品的type傳給工廠,然後工廠即會返回該產品。這樣意味著工廠內部必須針對type作判斷,也就是使用乙個switc...