網站首頁 編程語言 正文
簡單工廠模式(Simple Factory Pattern)屬于類的創建型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern)
是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
這個模式并不屬于GoF23里面的設計模式,其實他屬于一個過渡的模式,這個模式是為了引出下一篇要將的模式:工廠模式。
一、UML圖
簡單工廠模式解決的問題是如何去實例化一個合適的對象。
簡單工廠模式的核心思想就是:有一個專門的類來負責創建實例的過程。具體來說,把產品看著是一系列的類的集合,這些類是由某個抽象類或者接口派生出來的一個對象樹。而工廠類用來產生一個合適的對象來滿足客戶的要求。
二、簡單工廠模式的代碼實現:
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;
}
三、優缺點分析:
優點:客戶端不需要修改代碼。
缺點: 當需要增加新的運算類的時候,不僅需新加運算類,還要修改工廠類,違反了開閉原則。
四、.NET中簡單工廠模式的實現
介紹完了簡單工廠模式之后,.NET類庫中也有類似的實現,NET中System.Text.Encoding類就實現了簡單工廠模式,該類中的GetEncoding(int codepage)就是工廠方法,具體的代碼可以通過Reflector反編譯工具進行查看
.NET 中Encoding的UML圖為:
Encoding類中實現的簡單工廠模式是簡單工廠模式的一種演變,此時簡單工廠類由抽象產品角色扮演,然而.NET中Encoding類是如何解決簡單工廠模式中存在的問題的呢(即如果新添加一種編碼怎么辦)?在GetEncoding方法里的switch函數有如下代碼:
switch (codepage)
{
.......
default:
unicode = GetEncodingCodePage(codepage);
if (unicode == null)
{
unicode = GetEncodingRare(codepage); //當編碼很少見時
}
break;
......
}
在GetEncodingRare方法里有一些不常用編碼的實例化代碼,微軟正式通過這個方法來解決新增加一種編碼的問題。(其實也就是列出所有可能的編碼情況),微軟之所以以這樣的方式來解決這個問題,可能是由于現在編碼已經穩定了,添加新編碼的可能性比較低,所以在.NET 4.5仍然未改動這部分代碼。
原文鏈接:https://www.cnblogs.com/springsnow/p/11306792.html
相關推薦
- 2023-10-17 nginx重定向url、nginx域名轉發
- 2022-05-14 InnoDB主鍵索引樹和二級索引樹的場景分析_數據庫其它
- 2022-06-04 python對文檔中元素刪除,替換操作_python
- 2022-06-28 ES6基礎語法之數組拓展_基礎知識
- 2022-05-25 @Service未注入、 @Autowired未自動注入
- 2022-09-26 python中創建一個包并引用使用的操作方法_python
- 2023-04-03 PyTorch中Torch.arange函數詳解_python
- 2022-04-15 python機器學習MATLAB最小二乘法的兩種解讀_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支