欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.Net創(chuàng)建型設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple?Factory)

 更新時(shí)間:2022年05月25日 15:05:25   作者:springsnow  
這篇文章介紹了.Net設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple?Factory),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

簡(jiǎn)單工廠模式(Simple Factory Pattern)屬于類(lèi)的創(chuàng)建型模式,又叫靜態(tài)工廠方法模式(Static FactoryMethod Pattern)

是通過(guò)專(zhuān)門(mén)定義一個(gè)類(lèi)來(lái)負(fù)責(zé)創(chuàng)建其他類(lèi)的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類(lèi)。

這個(gè)模式并不屬于GoF23里面的設(shè)計(jì)模式,其實(shí)他屬于一個(gè)過(guò)渡的模式,這個(gè)模式是為了引出下一篇要將的模式:工廠模式。

一、UML圖

簡(jiǎn)單工廠模式解決的問(wèn)題是如何去實(shí)例化一個(gè)合適的對(duì)象。

簡(jiǎn)單工廠模式的核心思想就是:有一個(gè)專(zhuān)門(mén)的類(lèi)來(lái)負(fù)責(zé)創(chuàng)建實(shí)例的過(guò)程。具體來(lái)說(shuō),把產(chǎn)品看著是一系列的類(lèi)的集合,這些類(lèi)是由某個(gè)抽象類(lèi)或者接口派生出來(lái)的一個(gè)對(duì)象樹(shù)。而工廠類(lèi)用來(lái)產(chǎn)生一個(gè)合適的對(duì)象來(lái)滿(mǎn)足客戶(hù)的要求。

二、簡(jiǎn)單工廠模式的代碼實(shí)現(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)缺點(diǎn)分析:

優(yōu)點(diǎn):客戶(hù)端不需要修改代碼。
缺點(diǎn): 當(dāng)需要增加新的運(yùn)算類(lèi)的時(shí)候,不僅需新加運(yùn)算類(lèi),還要修改工廠類(lèi),違反了開(kāi)閉原則。

四、.NET中簡(jiǎn)單工廠模式的實(shí)現(xiàn)

介紹完了簡(jiǎn)單工廠模式之后,.NET類(lèi)庫(kù)中也有類(lèi)似的實(shí)現(xiàn),NET中System.Text.Encoding類(lèi)就實(shí)現(xiàn)了簡(jiǎn)單工廠模式,該類(lèi)中的GetEncoding(int codepage)就是工廠方法,具體的代碼可以通過(guò)Reflector反編譯工具進(jìn)行查看

.NET 中Encoding的UML圖為:

Encoding類(lèi)中實(shí)現(xiàn)的簡(jiǎn)單工廠模式是簡(jiǎn)單工廠模式的一種演變,此時(shí)簡(jiǎn)單工廠類(lèi)由抽象產(chǎn)品角色扮演,然而.NET中Encoding類(lèi)是如何解決簡(jiǎn)單工廠模式中存在的問(wèn)題的呢(即如果新添加一種編碼怎么辦)?在GetEncoding方法里的switch函數(shù)有如下代碼:

switch (codepage)
     {
          .......
   default:
                    unicode = GetEncodingCodePage(codepage);
                    if (unicode == null)
                    {
                        unicode = GetEncodingRare(codepage); //當(dāng)編碼很少見(jiàn)時(shí)
                    }
                    break;
           ......
      }

在GetEncodingRare方法里有一些不常用編碼的實(shí)例化代碼,微軟正式通過(guò)這個(gè)方法來(lái)解決新增加一種編碼的問(wèn)題。(其實(shí)也就是列出所有可能的編碼情況),微軟之所以以這樣的方式來(lái)解決這個(gè)問(wèn)題,可能是由于現(xiàn)在編碼已經(jīng)穩(wěn)定了,添加新編碼的可能性比較低,所以在.NET 4.5仍然未改動(dòng)這部分代碼。

到此這篇關(guān)于.Net設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple Factory)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • asp.net學(xué)習(xí)中發(fā)現(xiàn)的比較完整的流程

    asp.net學(xué)習(xí)中發(fā)現(xiàn)的比較完整的流程

    總結(jié)的非常不錯(cuò)的asp.net學(xué)習(xí)資料,方便想自學(xué)asp.net的朋友
    2008-08-08
  • ABP框架的基礎(chǔ)配置及依賴(lài)注入講解

    ABP框架的基礎(chǔ)配置及依賴(lài)注入講解

    這篇文章主要介紹了ABP框架的基礎(chǔ)配置及依賴(lài)注入講解,是ABP框架上手使用的基本,要的朋友可以參考下
    2016-06-06
  • 部署.Net6項(xiàng)目到docker

    部署.Net6項(xiàng)目到docker

    這篇文章介紹了部署.Net6項(xiàng)目到docker,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • ASP.NET?Core基礎(chǔ)之Main方法講解

    ASP.NET?Core基礎(chǔ)之Main方法講解

    這篇文章介紹了ASP.NET?Core基礎(chǔ)之Main方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net?Core微服務(wù)rpc框架GRPC通信基礎(chǔ)

    .Net?Core微服務(wù)rpc框架GRPC通信基礎(chǔ)

    這篇文章介紹了.Net?Core微服務(wù)rpc框架GRPC通信的基礎(chǔ)應(yīng)用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • ASP.NET中 Panel 控件的使用方法

    ASP.NET中 Panel 控件的使用方法

    Panel 控件用作其它控件的容器,其實(shí)Panel本質(zhì)就是一個(gè)DIV,本文主要介紹Panel控件的使用方法。
    2016-04-04
  • ASP.NET Core中間件

    ASP.NET Core中間件

    這篇文章介紹了ASP.NET Core的中間件,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#命名空間System.ComponentModel屬性方法匯總

    C#命名空間System.ComponentModel屬性方法匯總

    本文詳細(xì)講解了C#命名空間System.ComponentModel屬性方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Asp.net請(qǐng)求處理之管道處理介紹

    Asp.net請(qǐng)求處理之管道處理介紹

    在了解Asp.net請(qǐng)求處理流程的過(guò)程中,個(gè)人認(rèn)為有必要從源代碼的角度來(lái)了解asp.net管道是怎么實(shí)現(xiàn)的,需要的朋友可以參考下
    2012-11-11
  • ASP.NET Core基礎(chǔ)之異常中間件

    ASP.NET Core基礎(chǔ)之異常中間件

    這篇文章介紹了ASP.NET Core基礎(chǔ)之異常中間件,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評(píng)論