Asp.Net 設計模式 之 單例模式

来源:http://www.cnblogs.com/pang951189/archive/2017/11/07/7800780.html
-Advertisement-
Play Games

一、設計目的:讓項目中只顯示一個實例對象 二、設計步驟: 三、項目相關名詞或知識點解釋 此處類類型:如果當前類為SingleCase,則此靜態變數類型也要為SingleCase類型, 即在此處定義的靜態變數的類型要和這個當前類的類型相同 定義單例實例變數時,儘量都用instance(實例)來指代,方 ...


一、設計目的:讓項目中只顯示一個實例對象

二、設計步驟:

  1. 創建一個類;
  2. 構建類類型靜態變數;
  3. 定義返回值類為單例類型的靜態方法;
  4. 判斷靜態變數instance是否為空:如果為空,就創建實例,然後給單例類中的欄位進行賦值;如果不為空:返回此變數(return instance;)
  5. 單例模式創建成功;

三、項目相關名詞或知識點解釋

  • 此處類類型:如果當前類為SingleCase,則此靜態變數類型也要為SingleCase類型,
  • 即在此處定義的靜態變數的類型要和這個當前類的類型相同
  • 定義單例實例變數時,儘量都用instance(實例)來指代,方便以後自己和他人對代碼的閱讀。
  • 靜態變數在記憶體中只有一個,只占一份兒

四、相關源碼

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace SingleCaseModel00
 8 {
 9     /// <summary>
10     /// 1.創建這麼一個類
11     /// </summary>
12     class SingleCase
13     {
14         //2.構建類類型靜態變數
15         //此處類類型:如果當前類為SingleCase,則次靜態變數類型也要為SingleCase類型,
16         //即在此處定義的靜態變數的類型要和這個當前類的類型相同
17         //定義單例實例變數時,儘量都用instance(實例)來指代,方便閱讀
18         //靜態變數在記憶體中只有一個,只占一份兒
19         public static SingleCase instance = null;
20         //10.定義一個欄位,用來進行測試
21         public string name;
22         //3.定義返回值類為單例類型的靜態方法
23         public static SingleCase getInstance(string n)
24         {
25             //4.判斷靜態變數instance是否為空
26             if (instance == null)
27             {
28                 //5.如果為空,就創建實例
29                 instance = new SingleCase();
30                 //6.給單例類中的欄位進行賦值
31                 instance.name = n;
32             }
33             //7.返回此變數
34             return instance;
35         }
36         //8.如果這個類中還有其他的欄位,那麼直接在下麵寫出來即可
37         //如下:
38         //public string Name;
39         //public int Age;
40     }
41     class Program
42     {
43         static void Main(string[] args)
44         {
45             //9.調用上述單例類中方法,測試單例類
46             SingleCase s1 = SingleCase.getInstance("我是第一次傳過來的參數");
47             SingleCase s2 = SingleCase.getInstance("我是第二次傳過來的參數");
48             Console.WriteLine(s1.name);
49             Console.WriteLine(s2.name);
50             Console.ReadKey(); 
51         }
52     }
53 }

五、結果展示

六、對結果的解釋說明

兩次輸出的結果是一樣的,這是因為當第一次傳入參數的時候,instance 為空,執行上面的方法後,name的值就變成了“我是第一次傳過來的參數”,

當你第二次再次傳入參數時,由於靜態變數在記憶體中只有一個,只占一份兒,所以此時instance 已經不為空了,還會直接輸出第一個參數是的instance 值,

所以,不管你輸入幾次參數,輸出的結果都會是第一次輸出的那個instance 值,這也就是單例模式的機制所在。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習Linux決心計劃書 我叫耿長學,來自河南省鄧州市,經過老男孩教育運維班5個月學習後,我一定要達到的薪水目標是11000元,為了達到此目標我將採取如下10大行動或方案: 1、每天早上5:30-6:00起床,不睡懶覺,早起學習,早上起來講自己學習過的內容,多講,不停的講,練習自己的口才; 2、每天 ...
  • 博客園 首頁 新隨筆 聯繫 管理 隨筆 - 149 文章 - 28 評論 - 205 nginx簡易教程 目錄 nginx簡易教程 概述 安裝與使用 安裝 從源代碼編譯 Nginx Windows 安裝 使用 nginx 配置實戰 http反向代理配置 負載均衡配置 網站有多個webapp的配置 h ...
  • Varnish的VCL子程式 以下內容參考: http://book.varnish software.com/4.0/ VCL子進程,在其中定製Varnish的行為。VCL子常式可用於:添加自定義標頭,更改Varnish錯誤消息的外觀,在Varnish中添加HTTP重定向功能,清除內容以及定義緩存 ...
  • Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。動靜分離技術其實是採用代理的方式,在server{}段中加入帶正則匹配的location來指定匹配項針對PHP的動靜分離:靜態頁面交給Nginx處理,動態頁面交給PHP FPM模塊或Apache處理。在Nginx的配 ...
  • vim 插入模式 a 游標後 A 行尾 o 游標所在行下一行 O 游標所在行上一行 i 游標前 I 行首 s 刪除游標所在位置的字元併進入插入模式 命令模式 d 刪除 dd 刪除當前行 dgg 刪除游標到文檔首 dG 刪除游標到文檔尾部 d$ 刪除游標到行尾,包括游標所在位置字元 d^ 刪除游標到行 ...
  • 1.使用xshell連接虛擬機,也可直接在虛擬機中敲命令。 以下是xshell上的命令: 首先安裝HTTPD包 [root@one ~]# mount /dev/sr0 /mnt[root@one ~]# yum install httpd重啟服務查看靜態 [root@one ~]# systemc ...
  • 本文將通過場景例子演示,來通俗易懂的講解在複雜的業務邏輯下,如何以最簡練的代碼,最直觀的編寫事務代碼。 通過一系列優化最終達到兩個效果,1.通過代碼塊來控制事務(分散式事務),2.通過委托優化TransactionScope的編碼寫法。 本文需要的知識點:1. Action委托 2. 分散式事務Tr ...
  • 在ABP官網創建一個.Net Core項目編譯完成 1、 發佈網站 2、 IIS新建站點 目錄指向發佈的目錄 3、安裝WindowsHosting IIS安裝伺服器上安裝DotNetCore.X.X.X-WindowsHosting安裝成功後重啟IIS伺服器。根據版本選擇下載 下載地址:https: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...