C#編程模式之享元模式

? ? ? ? 創作背景:各位朋友,我們繼續學習C#的編程模式,本文主要介紹享元模式。享元模式是一種結構型設計模式,它主要用于減少創建對象的數量,從而提高程序性能。它通過共享對象的方式來減少內存的使用,特別是系統中有大量相似對象的時候,這種模式尤其有效。

? ? ? ? 享元模式的主要組成部分如下:

? ? ? ? 1、享元對象:享元對象就是被共享的對象,包含很多內部狀態,這些狀態通常是不變的。

? ? ? ? 2、享元工廠:負責創建和管理享元對象。

? ? ? ? 3、非共享狀態:每個享元對象的共享狀態是特定的,不會被共享。

? ? ? ? 示例代碼如下:

? ? ? ? 1、創建享元接口。

    /// <summary>/// 享元對象接口/// </summary>public abstract class Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName">名稱</param>public abstract string Operation(string strName);}

? ? ? ? 2、實現共享享元對象。

    /// <summary>/// 實際的享元類(共享狀態)/// </summary>public class ActualFlyweight : Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "創建了ActualFlyweight,名稱為:" + strName;}}

? ? ? ? 3、創建非共享享元對象。

    /// <summary>/// 實際的享元類(非共享)/// </summary>public class UnsharedActualFlyweight : Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "創建了UnsharedActualFlyweight,名稱為:" + strName;}}

? ? ? ? 4、創建享元工廠。

    /// <summary>/// 享元工廠/// </summary>public class FlyweightFactory{private Hashtable flyweights = new Hashtable();/// <summary>/// 構造函數/// </summary>public FlyweightFactory(){flyweights.Add("One", new ActualFlyweight());flyweights.Add("Two", new ActualFlyweight());flyweights.Add("Three", new ActualFlyweight());}/// <summary>/// 獲取Hashtable中的一個享元/// </summary>/// <param name="key"></param>/// <returns></returns>public Flyweight GetFlyweight(string key){return ((Flyweight)flyweights[key]);}}

? ? ? ? 5、客戶端調用。

        /// <summary>/// 享元模式/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_flyweight_Click(object sender, EventArgs e){FlyweightFactory factory = new FlyweightFactory();Flyweight fx = factory.GetFlyweight("One");tbox_flyweight.Text = fx.Operation("One");Flyweight fy = factory.GetFlyweight("Two");tbox_flyweight.Text += "\r\n" + fy.Operation("Two");Flyweight fz = factory.GetFlyweight("Three");tbox_flyweight.Text += "\r\n" + fz.Operation("Three");UnsharedActualFlyweight fu = new UnsharedActualFlyweight();tbox_flyweight.Text += "\r\n" + fu.Operation("Four");}

? ? ? ? 6、運行結果圖片。

? ? ? ? ?以上就是全部享元模式的一個簡單示例程序,希望對各位小伙伴能有個幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10037.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springCloud服務降級使用到的組件

服務降級在Spring Cloud中通常使用的組件包括斷路器&#xff08;Circuit Breaker&#xff09;和降級處理器&#xff08;Fallback&#xff09;。以下是它們的概念表述&#xff1a; 斷路器&#xff08;Circuit Breaker&#xff09;&#xff1a;斷路器是一種設計模式&#xff0c;…

【多客陪玩】陪玩小程序源碼APP+小程序+公眾號開發 -源碼交付,線下可爆改家政,整理師等功能

簡述 隨著電競行業的快速發展&#xff0c;電競陪玩APP正在逐漸成為用戶在休閑娛樂時的首選。為了吸引用戶和提高用戶體驗&#xff0c;電競陪玩APP開發需要定制一些特色功能&#xff0c;并通過合適的盈利模式來獲得收益。本文將為您介紹電競陪玩APP開發需要定制的特色功能以及常…

M21121G-11

M21121專為當今要求苛刻的電信、數據通信和廣播視頻應用而設計&#xff0c;是一款低功耗、高速34x34交叉點交換機&#xff0c;具有輸入均衡和內置系統測試功能。在所有通道運行的情況下&#xff0c;該設備的功耗通常低至3.5瓦。PowerScaler?功能提供動態可擴展的開關設置&…

升壓、降壓、升降壓LED恒流驅動器

AP9139 是一款外圍電路簡單的調光無頻閃降壓 LED 恒流驅動器&#xff0c;支持升壓、降壓、及升降壓拓撲的 應用&#xff0c;適用于6.5-80V輸入電壓范圍的LED恒流照明領 域&#xff0c;調光深度深&#xff0c;低輝負載調整率和一致性好。 AP9139芯片的輸出電通過ISENSEN對ISENEP…

React 之 lazy(延遲加載)(十六)

lazy 能夠讓你在組件第一次被渲染之前延遲加載組件的代碼。 在組件外部調用 lazy&#xff0c;以聲明一個懶加載的 React 組件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 實現懶加載組件 //App.js imp…

深入學習指針3

目錄 前言 1.二級指針 2.指針數組 3.指針數組模擬二維數組 前言 Hello,小伙伴們我又來了&#xff0c;上期我們講到了數組名的理解&#xff0c;指針與數組的關系等知識&#xff0c;那今天我們就繼續深入到學習指針域數組的練聯系&#xff0c;如果喜歡作者菌生產的內容還望不…

Python GraphQL服務器實現庫之tartiflette使用詳解

概要 Tartiflette是一個為Python編寫的GraphQL服務器實現,它建立在現代異步編程庫如asyncio之上,提供了高性能的GraphQL執行環境。Tartiflette專注于提供最佳的開發者體驗,支持最新的GraphQL特性。 安裝 安裝Tartiflette相對簡單,但需要依賴于一些系統級的庫。 首先,需…

ORACLE ODA一體機存儲節點電源故障的分析處理

近期&#xff0c;某用戶的ORACLE ODA一體機在例行機房巡檢時出現亮黃燈告警&#xff1b;用戶反饋次問題后我們立刻通過遠程方式&#xff0c;登陸ODA的控制臺進行查看&#xff1b; 對于ODA一體機&#xff08;2個計算節點1個存儲節點&#xff09;&#xff0c;計算節點可以通過il…

Python爬蟲實戰:爬取【某旅游交通出行類網站中國內熱門景點】的評論數據,使用Re、BeautifulSoup與Xpath三種方式解析數據,代碼完整

一、分析爬取網頁&#xff1a; 1、網址 https://travel.qunar.com/2、 打開網站&#xff0c;找到要爬取的網頁 https://travel.qunar.com/p-cs299979-chongqing進來之后&#xff0c;找到評論界面&#xff0c;如下所示&#xff1a;在這里我選擇驢友點評數據爬取點擊【驢友點評…

騰訊共享WiFi項目的加盟方式有哪些?

在這個互聯互通的時代&#xff0c;共享經濟的浪潮正以前所未有的力量席卷全球&#xff0c;而騰訊作為中國互聯網巨頭之一自然不會錯過這場盛宴。其推出的騰訊共享WiFi項目自問世以來就備受矚目&#xff0c;它不僅為用戶提供便捷的上網服務&#xff0c;更為創業者打開了一個全新…

untiy 為預制體動態加載光照貼圖

unity版本為2021.8 預制體不能攜帶光照貼圖信息&#xff0c;只能我們自己準備了 多方查找加自己摸索終于找到了適合新版本的解決方案&#xff0c;直接貼代碼 將這個腳本掛到預制體的最上級 using System.Collections; using System.Collections.Generic; using UnityEditor; …

美顏SDK是什么?深度學習技術在直播美顏SDK中的應用探析

美顏SDK的出現為直播、視頻通話等應用提供了強大的美顏功能。接下來&#xff0c;我們將一同探討美顏SDK的概念&#xff0c;以及深度學習技術在直播美顏SDK中的應用。 一、什么是美顏SDK&#xff1f; 美顏SDK是一種軟件開發工具包&#xff0c;旨在為開發者提供便捷而強大的美顏…

四大誤區:中臺產品時設計你中招了幾個?

01 誤區一&#xff1a;管理系統分析工具數字化中臺 傳統企業在經營管理過程中會根據業務或管理需求&#xff0c;不斷添加和升級諸如OA、CRM等不同類別的管理系統。 為了更好地響應前臺的業務需求&#xff0c;有些企業成立了新的或擴大、加強了原有的技術部門&#xff0c;由…

LeetCode 題目 116:填充每個節點的下一個右側節點指針

作者介紹&#xff1a;10年大廠數據\經營分析經驗&#xff0c;現任字節跳動數據部門負責人。 會一些的技術&#xff1a;數據分析、算法、SQL、大數據相關、python&#xff0c;歡迎探討交流 歡迎加入社區&#xff1a;碼上找工作 作者專欄每日更新&#xff1a; LeetCode解鎖1000題…

C#上位機1ms級高精度定時任務

precisiontimer 安裝擴展包 添加引用 完整代碼 using PrecisionTiming;using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…

WinSCP軟件出錯:連接被意外關閉了

問題描述&#xff1a; WinSCP 登錄 M3568 的 linux系統&#xff0c;提示 列出’/home/root’的目錄項時出錯&#xff0c;連接被意外關閉 具體提示如下圖所示&#xff0c;列出’/home/root’的目錄項時出錯。 連接被意外關閉了 服務器發送命令的退出狀態255 原因及解決&#xf…

notepad++安裝 hex-editor插件

打開notepad 點擊插件 搜索 hex-editor,點擊右側 安裝install 安裝成功后&#xff0c;在已安裝插件中就有顯示了

spring boot參數驗證注解@NotNull、@NotBlank和@NotEmpty區別

目錄 前言說明舉例 前言 使用spring boot參數驗證是常常會使用NotNull、NotBlank和NotEmpty三個判斷是否不為空的注解&#xff0c;中文都有不能為空的意思&#xff0c;大部分使用者都傻傻分清它們之間到底有什么區別。今天就讓咱們來一起探索它們之間的不同吧。 說明 注解名…

等保測評安全物理環境測評講解

等保測評中的安全物理環境測評主要關注信息系統的物理安全保護措施&#xff0c;確保機房、設備和數據的物理安全。以下是安全物理環境測評的關鍵點講解&#xff1a; 1. **物理位置選擇**&#xff1a; - 機房應選擇在具有防震、防風和防雨能力的建筑內。 - 應避免設在建筑…

【數據庫】數據庫指令

一。數據庫打開 1.命令行 2.進入mysql mysql -uroot -p密碼 3.退出 exit&#xff1b; 二。針對數據庫的操作 1.創建數據庫&#xff08;有分號&#xff09; create database student; 2.使用數據庫 use student 3.刪除數據庫&#xff08;有分號&#xff09; drop database…