一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net 簡單工廠模式和工廠方法模式之論述

asp.net 簡單工廠模式和工廠方法模式之論述

2019-09-25 10:42asp.net開發網 ASP.NET教程

簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對于客戶端來說,去除了于具體產品的依賴

簡單工廠模式和工廠方法模式的區別 
簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對于客戶端來說,去除了于具體產品的依賴。而工廠方法模式定義了一個用于創建對象的借口,讓子類決定實例化哪一個類,工廠方法是一個類的實例化延遲到其子類。其實多做一些聯系不難發現:工廠方法模式實現時,客戶端需要決定實例化那個工廠來實現運算類,選擇判斷的問題還是存在的,也即是說,工廠方法吧簡單工廠的內部邏輯判斷移到了客戶端代碼來進行,我想要加一些功能,本來是需要修改工廠類的,但是現在我們只需要修改客戶端即可。下面是我們老師通過一個項目來簡單的分析工廠模式的區別,我大致整理了一下,寫的不好,只作為參考哦。 

現在我們在開發一些web項目或者WInform項目時,我們都要數據庫來管理所有的信息,現在就以我開發的一個系統《隴原商城》為例,假如我的系統投入使用了,假如我用的數據庫就是Access數據庫,但是,過了一段時間,由于隴原商城貨買的非常好,Access數據庫已近不能滿足客戶的需求了,這時候客戶想換成Sql Server數據庫,這樣的話,我們又必須重新編寫代碼,重新換成Sql Server數據庫來實現,假如又過了一段時間,Sql Server數據庫也不能滿足用戶的的需求,這時候用戶又想換成Oracel數據庫來實現呢,到這里就不說了,可能我們開發人員就帶吐血啊,這樣就引起來我們的深思,我們怎么樣做一個系統可以讓我們不在那么麻煩的修改代碼呢?這就涉及到設計模式了,所以就出現了工廠方法模式,下面用工廠方法模式做一個小實驗來實現這樣的一個過程。 

新建一個控制臺應用程序,命名為FactoryMethodPattern,在控制臺中添加一個IProductDAL接口,在里面定義一個方法,實現如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public interface IProductDAL 

void Insert(); 


然后新建接口實現工廠模式IProductDALFactory,實現如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public interface IProductDALFactory 

IProductDAL CreateProductDAL(); 


接下來在項目中添加類AccessProductDAL,繼承自接口IProductDAL,實現的方法是向控制臺輸出一條信息,實現如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public class AccessProductDAL:IProductDAL 

#region IProductDAL 成員 
public void Insert() 

Console.WriteLine("AccessProductDAL.Insert"); 

#endregion 


然后創建一個AccessProductDAL的工廠類,使他繼承自IProductDALFactory接口,創建一個方法使其它的返回值為IProductDAL,最后在方法的實現里面返回實例化的AccessProductDAL,實現代碼如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public class AccessProductDALFactory:IProductDALFactory 

#region IProductDALFactory 成員 
public IProductDAL CreateProductDAL() 

return new AccessProductDAL(); 

#endregion 


接下來寫一下:實現Sql Server數據庫的方法,添加一個類SqlProductDAL,使其方法輸出一句話 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public class SqlProductDAL:IProductDAL 

#region IProductDAL 成員 
public void Insert() 

Console.WriteLine("SqlProductDAL.Insert"); 

#endregion 


再添加SqlProductDALFactory類,實現代碼如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public class SqlProductDALFactory:IProductDALFactory 

#region IProductDALFactory 成員 
public IProductDAL CreateProductDAL() 

return new SqlProductDAL(); 

#endregion 


接下來添加App.config文件,來實現系統所選擇的數據庫是什么數據庫,代碼如下: 

復制代碼代碼如下:


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


在寫業務邏輯層BLL,利用反射獲取app.config中所選擇的路徑是什么。讀取出來 
代碼如下: 

復制代碼代碼如下:


namespace FactoryMethodPattern 

public class BLL 

public void Insert() 

//利用反射實現功能 
IProductDALFactory factory =(IProductDALFactory) Assembly.GetExecutingAssembly().CreateInstance(ConfigurationManager.AppSettings["DALFactory"]); 
IProductDAL pro = factory.CreateProductDAL(); 
pro.Insert(); 



最后在program里面讀取BLL層信息,輸出信息 

復制代碼代碼如下:


namespace FactoryMethodPattern 

class Program 

static voidMain(string[] args) 

BLL product = new BLL(); 
product.Insert(); 
Console.ReadKey(); 



最后單擊運行顯示的輸出信息為: 

asp.net 簡單工廠模式和工廠方法模式之論述

現在這個小系統整體就完成了,現在我要加入Oracel數據庫呢?我只要在寫兩個Oracel數據庫的類加到里面,再在app.config中修改一下路徑就OK了。

總結:工廠方法克服了簡單工廠違背開放-封閉原則的缺點,有保持了封裝對象創建過程的優點,工廠方法模式是簡單工廠模式的進一步抽象和推廣,由于使用了多態性,工廠方法模式保持了了簡單工廠模式的優點,而且克服了它的缺點。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲天天综合 | 国内精品视频一区二区三区八戒 | 亚洲第一二三四区 | 99热在线精品播放 | 国产一区二区播放 | 国模丰满美女冰漪34d | 办公室的秘密在线观看 | 日韩无遮挡大尺度啪啪影片 | 日本高清在线观看天码888 | 国内精品久久久久久不卡影院 | 视频二区 素人 制服 国产 | 极品奶妈漫画 | 麻豆视频网 | 果冻传媒在线视频观看免费 | 91精品国产高清久久久久久 | 日日艹 | 国产欧美一区二区三区精品 | 欧美久久久久久 | 臀精插宫NP文| 青青国产成人久久激情911 | 美女视频在线观看视频 | 艹出白浆 | 亚洲va久久久噜噜噜久久狠狠 | 日本中文字幕永久在线 | 欧美一区不卡二区不卡三区 | 俄罗斯精品bbw | 4399h漫画 | 四虎在线最新永久免费 | 91人人在线| 国产伦精品一区二区三区免费迷 | 国产精品原创视频 | 人妖女天堂视频在线96 | 免费被靠视频动漫 | 99精品视频在线观看re | 岛国片免费观看 | 火影小南被爆羞羞网站进入 | 91麻豆精品国产91久久久 | 韩国三级在线 | 久久久影院亚洲精品 | bestialitysex杂交 bedfriend泰剧全集免费观看 | 亚洲精品国产一区二区第一页 |