濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述

asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述

熱門(mén)標(biāo)簽:上海楊浦怎么申請(qǐng)申請(qǐng)400電話 地圖標(biāo)注多個(gè)行程 山西防封卡電銷卡套餐 銅川小型外呼系統(tǒng)運(yùn)營(yíng)商 云南外呼電銷機(jī)器人系統(tǒng) 陜西人工外呼系統(tǒng)哪家好 浙江外呼系統(tǒng)怎么安裝 海外地圖標(biāo)注門(mén)市標(biāo) 廈門(mén)商鋪地圖標(biāo)注
簡(jiǎn)單工廠模式和工廠方法模式的區(qū)別
簡(jiǎn)單工廠模式的最大優(yōu)點(diǎn)在于工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類,對(duì)于客戶端來(lái)說(shuō),去除了于具體產(chǎn)品的依賴。而工廠方法模式定義了一個(gè)用于創(chuàng)建對(duì)象的借口,讓子類決定實(shí)例化哪一個(gè)類,工廠方法是一個(gè)類的實(shí)例化延遲到其子類。其實(shí)多做一些聯(lián)系不難發(fā)現(xiàn):工廠方法模式實(shí)現(xiàn)時(shí),客戶端需要決定實(shí)例化那個(gè)工廠來(lái)實(shí)現(xiàn)運(yùn)算類,選擇判斷的問(wèn)題還是存在的,也即是說(shuō),工廠方法吧簡(jiǎn)單工廠的內(nèi)部邏輯判斷移到了客戶端代碼來(lái)進(jìn)行,我想要加一些功能,本來(lái)是需要修改工廠類的,但是現(xiàn)在我們只需要修改客戶端即可。下面是我們老師通過(guò)一個(gè)項(xiàng)目來(lái)簡(jiǎn)單的分析工廠模式的區(qū)別,我大致整理了一下,寫(xiě)的不好,只作為參考哦。

現(xiàn)在我們?cè)陂_(kāi)發(fā)一些web項(xiàng)目或者WInform項(xiàng)目時(shí),我們都要數(shù)據(jù)庫(kù)來(lái)管理所有的信息,現(xiàn)在就以我開(kāi)發(fā)的一個(gè)系統(tǒng)《隴原商城》為例,假如我的系統(tǒng)投入使用了,假如我用的數(shù)據(jù)庫(kù)就是Access數(shù)據(jù)庫(kù),但是,過(guò)了一段時(shí)間,由于隴原商城貨買的非常好,Access數(shù)據(jù)庫(kù)已近不能滿足客戶的需求了,這時(shí)候客戶想換成Sql Server數(shù)據(jù)庫(kù),這樣的話,我們又必須重新編寫(xiě)代碼,重新?lián)Q成Sql Server數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn),假如又過(guò)了一段時(shí)間,Sql Server數(shù)據(jù)庫(kù)也不能滿足用戶的的需求,這時(shí)候用戶又想換成Oracel數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)呢,到這里就不說(shuō)了,可能我們開(kāi)發(fā)人員就帶吐血啊,這樣就引起來(lái)我們的深思,我們?cè)趺礃幼鲆粋€(gè)系統(tǒng)可以讓我們不在那么麻煩的修改代碼呢?這就涉及到設(shè)計(jì)模式了,所以就出現(xiàn)了工廠方法模式,下面用工廠方法模式做一個(gè)小實(shí)驗(yàn)來(lái)實(shí)現(xiàn)這樣的一個(gè)過(guò)程。

新建一個(gè)控制臺(tái)應(yīng)用程序,命名為FactoryMethodPattern,在控制臺(tái)中添加一個(gè)IProductDAL接口,在里面定義一個(gè)方法,實(shí)現(xiàn)如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public interface IProductDAL
{
void Insert();
}
}

然后新建接口實(shí)現(xiàn)工廠模式IProductDALFactory,實(shí)現(xiàn)如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public interface IProductDALFactory
{
IProductDAL CreateProductDAL();
}
}

接下來(lái)在項(xiàng)目中添加類AccessProductDAL,繼承自接口IProductDAL,實(shí)現(xiàn)的方法是向控制臺(tái)輸出一條信息,實(shí)現(xiàn)如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public class AccessProductDAL:IProductDAL
{
#region IProductDAL 成員
public void Insert()
{
Console.WriteLine("AccessProductDAL.Insert");
}
#endregion
}
}

然后創(chuàng)建一個(gè)AccessProductDAL的工廠類,使他繼承自IProductDALFactory接口,創(chuàng)建一個(gè)方法使其它的返回值為IProductDAL,最后在方法的實(shí)現(xiàn)里面返回實(shí)例化的AccessProductDAL,實(shí)現(xiàn)代碼如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public class AccessProductDALFactory:IProductDALFactory
{
#region IProductDALFactory 成員
public IProductDAL CreateProductDAL()
{
return new AccessProductDAL();
}
#endregion
}
}

接下來(lái)寫(xiě)一下:實(shí)現(xiàn)Sql Server數(shù)據(jù)庫(kù)的方法,添加一個(gè)類SqlProductDAL,使其方法輸出一句話
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public class SqlProductDAL:IProductDAL
{
#region IProductDAL 成員
public void Insert()
{
Console.WriteLine("SqlProductDAL.Insert");
}
#endregion
}
}

再添加SqlProductDALFactory類,實(shí)現(xiàn)代碼如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public class SqlProductDALFactory:IProductDALFactory
{
#region IProductDALFactory 成員
public IProductDAL CreateProductDAL()
{
return new SqlProductDAL();
}
#endregion
}
}

接下來(lái)添加App.config文件,來(lái)實(shí)現(xiàn)系統(tǒng)所選擇的數(shù)據(jù)庫(kù)是什么數(shù)據(jù)庫(kù),代碼如下:
復(fù)制代碼 代碼如下:

?xml version="1.0" encoding="utf-8" ?>
configuration>
appSettings>
add key="DALFactory" value="FactoryMethodPattern.SqlProductDALFactory"/>
/appSettings>
/configuration>

在寫(xiě)業(yè)務(wù)邏輯層BLL,利用反射獲取app.config中所選擇的路徑是什么。讀取出來(lái)
代碼如下:
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
public class BLL
{
public void Insert()
{
//利用反射實(shí)現(xiàn)功能
IProductDALFactory factory =(IProductDALFactory) Assembly.GetExecutingAssembly().CreateInstance(ConfigurationManager.AppSettings["DALFactory"]);
IProductDAL pro = factory.CreateProductDAL();
pro.Insert();
}
}
}

最后在program里面讀取BLL層信息,輸出信息
復(fù)制代碼 代碼如下:

namespace FactoryMethodPattern
{
class Program
{
static voidMain(string[] args)
{
BLL product = new BLL();
product.Insert();
Console.ReadKey();
}
}
}

最后單擊運(yùn)行顯示的輸出信息為:

現(xiàn)在這個(gè)小系統(tǒng)整體就完成了,現(xiàn)在我要加入Oracel數(shù)據(jù)庫(kù)呢?我只要在寫(xiě)兩個(gè)Oracel數(shù)據(jù)庫(kù)的類加到里面,再在app.config中修改一下路徑就OK了。

  1. 總結(jié):工廠方法克服了簡(jiǎn)單工廠違背開(kāi)放-封閉原則的缺點(diǎn),有保持了封裝對(duì)象創(chuàng)建過(guò)程的優(yōu)點(diǎn),工廠方法模式是簡(jiǎn)單工廠模式的進(jìn)一步抽象和推廣,由于使用了多態(tài)性,工廠方法模式保持了了簡(jiǎn)單工廠模式的優(yōu)點(diǎn),而且克服了它的缺點(diǎn)。
您可能感興趣的文章:
  • .NET簡(jiǎn)單工廠模式講解
  • 淺析.net簡(jiǎn)單工廠模式
  • JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動(dòng)態(tài)原型模式)
  • Android源碼學(xué)習(xí)之工廠方法模式應(yīng)用及優(yōu)勢(shì)介紹
  • 深入c#工廠模式的詳解
  • PHP 工廠模式使用方法
  • javascript 模式設(shè)計(jì)之工廠模式學(xué)習(xí)心得
  • C++設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例
  • JavaScript 模式之工廠模式(Factory)應(yīng)用介紹
  • .NET工廠方法模式講解

標(biāo)簽:朔州 西雙版納 自貢 孝感 許昌 萊蕪 信陽(yáng) 常州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述》,本文關(guān)鍵詞  asp.net,簡(jiǎn)單,工廠,模式,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于asp.net 簡(jiǎn)單工廠模式和工廠方法模式之論述的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    孙吴县| 中山市| 泗水县| 沙湾县| 那曲县| 民乐县| 晋宁县| 华亭县| 大悟县| 山西省| 渭南市| 桐柏县| 永嘉县| 富蕴县| 池州市| 天门市| 贡觉县| 海兴县| 穆棱市| 广宁县| 文昌市| 嘉黎县| 三亚市| 临高县| 临漳县| 方正县| 宁德市| 文登市| 金乡县| 永康市| 榆林市| 资溪县| 绥芬河市| 尚志市| 兴和县| 勐海县| 沅江市| 石棉县| 图木舒克市| 开江县| 子长县|