.Net創(chuàng)建型設(shè)計模式之簡單工廠模式(Simple?Factory)
簡單工廠模式(Simple Factory Pattern)屬于類的創(chuàng)建型模式,又叫靜態(tài)工廠方法模式(Static FactoryMethod Pattern)
是通過專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。
這個模式并不屬于GoF23里面的設(shè)計模式,其實他屬于一個過渡的模式,這個模式是為了引出下一篇要將的模式:工廠模式。
一、UML圖

簡單工廠模式解決的問題是如何去實例化一個合適的對象。
簡單工廠模式的核心思想就是:有一個專門的類來負(fù)責(zé)創(chuàng)建實例的過程。具體來說,把產(chǎn)品看著是一系列的類的集合,這些類是由某個抽象類或者接口派生出來的一個對象樹。而工廠類用來產(chǎn)生一個合適的對象來滿足客戶的要求。
二、簡單工廠模式的代碼實現(xiàn):
public static Operation createOperate(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;
}三、優(yōu)缺點分析:
優(yōu)點:客戶端不需要修改代碼。
缺點: 當(dāng)需要增加新的運算類的時候,不僅需新加運算類,還要修改工廠類,違反了開閉原則。
四、.NET中簡單工廠模式的實現(xiàn)
介紹完了簡單工廠模式之后,.NET類庫中也有類似的實現(xiàn),NET中System.Text.Encoding類就實現(xiàn)了簡單工廠模式,該類中的GetEncoding(int codepage)就是工廠方法,具體的代碼可以通過Reflector反編譯工具進(jìn)行查看
.NET 中Encoding的UML圖為:

Encoding類中實現(xiàn)的簡單工廠模式是簡單工廠模式的一種演變,此時簡單工廠類由抽象產(chǎn)品角色扮演,然而.NET中Encoding類是如何解決簡單工廠模式中存在的問題的呢(即如果新添加一種編碼怎么辦)?在GetEncoding方法里的switch函數(shù)有如下代碼:
switch (codepage)
{
.......
default:
unicode = GetEncodingCodePage(codepage);
if (unicode == null)
{
unicode = GetEncodingRare(codepage); //當(dāng)編碼很少見時
}
break;
......
}在GetEncodingRare方法里有一些不常用編碼的實例化代碼,微軟正式通過這個方法來解決新增加一種編碼的問題。(其實也就是列出所有可能的編碼情況),微軟之所以以這樣的方式來解決這個問題,可能是由于現(xiàn)在編碼已經(jīng)穩(wěn)定了,添加新編碼的可能性比較低,所以在.NET 4.5仍然未改動這部分代碼。
到此這篇關(guān)于.Net設(shè)計模式之簡單工廠模式(Simple Factory)的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
析構(gòu)函數(shù)的作用 什么是析構(gòu)函數(shù)
這篇文章主要講述了析構(gòu)函數(shù)的概念、原理、功能以及定義格式,析構(gòu)函數(shù)是C#程序設(shè)計中比較重要的概念,需要的朋友可以參考一下2007-12-12
SqlConnection.ConnectionString相關(guān)關(guān)鍵字
SqlConnection.ConnectionString相關(guān)關(guān)鍵字...2007-01-01
asp.net實例代碼protected override void Render(HtmlTextWriter wri
把最終要輸出的html壓縮后再輸出和最終輸出前先存為html文件,如果發(fā)布最新信息了,可以打開一次default.aspx,然后他又會生成一次html2008-08-08
ASP.NET中 ObjectDataSource控件的DataObjectTypeName屬性
本文主要介紹ObjectDataSource控件和DataObjectTypeName屬性的用法,希望能給小伙伴們一些幫助。2016-04-04
ASP.Net?Core?MVC基礎(chǔ)系列之項目創(chuàng)建
這篇文章介紹了創(chuàng)建ASP.Net?Core?MVC項目的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
.Net結(jié)構(gòu)型設(shè)計模式之橋接模式(Bridge)
這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計模式之橋接模式(Bridge),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05

