C#--設計模式之享元模式
內部狀態:在享元物件的內部並且不會隨著環境的改變而改變的共享部分
外部狀態:隨環境改變而改變的,不可以共享的狀態。
上熱菜:
// 定義外部狀態,例如字母的位置等資訊
int externalstate = 10;
// 初始化享元工廠
FlyweightFactory factory = new FlyweightFactory();
// 判斷是否已經建立了字母A,如果已經建立就直接使用建立的物件A
Flyweight fa = factory.GetFlyweight("A");
if (fa != null)
{
// 把外部狀態作為享元物件的方法呼叫引數
fa.Operation(--externalstate);
}
// 判斷是否已經建立了字母B
Flyweight fb = factory.GetFlyweight("B");
if (fb != null)
{
fb.Operation(--externalstate);
}
// 判斷是否已經建立了字母C
Flyweight fc = factory.GetFlyweight("C");
if (fc != null)
{
fc.Operation(--externalstate);
}
// 判斷是否已經建立了字母D
Flyweight fd = factory.GetFlyweight("D");
if (fd != null)
{
fd.Operation(--externalstate);
}
else
{
Console.WriteLine("駐留池中不存在字串D");
// 這時候就需要建立一個物件並放入駐留池中
ConcreteFlyweight d = new ConcreteFlyweight("D");
factory.flyweights.Add("D", d);
}
Console.Read();
}
/// <summary>
/// 享元工廠,負責建立和管理享元物件
/// </summary>
public class FlyweightFactory
{
// 最好使用泛型Dictionary<string,Flyweighy>
//public Dictionary<string, Flyweight> flyweights = new Dictionary<string, Flyweight>();
public Hashtable flyweights = new Hashtable();
public FlyweightFactory()
{
flyweights.Add("A", new ConcreteFlyweight("A"));
flyweights.Add("B", new ConcreteFlyweight("B"));
flyweights.Add("C", new ConcreteFlyweight("C"));
}
public Flyweight GetFlyweight(string key)
{
// 更好的實現如下
//Flyweight flyweight = flyweights[key] as Flyweight;
//if (flyweight == null)
//{
// Console.WriteLine("駐留池中不存在字串" + key);
// flyweight = new ConcreteFlyweight(key);
//}
//return flyweight;
return flyweights[key] as Flyweight;
}
}
/// <summary>
/// 抽象享元類,提供具體享元類具有的方法
/// </summary>
public abstract class Flyweight
{
public abstract void Operation(int extrinsicstate);
}
// 具體的享元物件,這樣我們不把每個字母設計成一個單獨的類了,而是作為把共享的字母作為享元物件的內部狀態
public class ConcreteFlyweight : Flyweight
{
// 內部狀態
private string intrinsicstate;
// 建構函式
public ConcreteFlyweight(string innerState)
{
this.intrinsicstate = innerState;
}
/// <summary>
/// 享元類的例項方法
/// </summary>
/// <param name="extrinsicstate">外部狀態</param>
public override void Operation(int extrinsicstate)
{
Console.WriteLine("具體實現類: intrinsicstate {0}, extrinsicstate {1}", intrinsicstate, extrinsicstate);
}
}
執行結果如下:
相關推薦
設計模式之享元模式(C++)
設計模式之享元模式 享元模式,運用共享技術有效地支援大量細粒度的物件。面向物件技術可以很好地解決一些靈活性或擴充套件性問題,但在很多情況下需要在系統中增加類和物件的個數。當物件數量太多時,將導致執行代價過高,帶來效能下降等問題。享元模式正式為了解決這依賴問題而誕
C#--設計模式之享元模式
這幾天專案比較忙,感覺已經隔了半個世紀沒來園裡轉了,接著上次的設計模式來繼續說吧,這會來敘說一下享元模式,首先應用場景:就是在 我們需要重複使用某個物件的時候,如果我們重複地使用new建立這個物件的話,這樣我們在記憶體就需要多次地去申請記憶體空間了,這樣可能會出現記憶
23種設計模式之享元模式(結構型,7 Flyweight,c++實現)
程式碼實現:#include<iostream>#include<list>#include<string>#include<map>usingnamespace std;classPerson{public:Person(st
c#設計模式之享元模式
//類似單例模式加上工廠模式,避免大量建立物件帶來的記憶體消耗 using System; using System.Collections; public abstract class cha
java設計模式之享元模式
並不是 計算 lov 這一 返回 實例 map() 角色 ron 當前咱們國家正在大力倡導構建和諧社會,其中一個很重要的組成部分就是建設資源節約型社會,“浪費可恥,節儉光榮”。在軟件系統中,有時候也會存在資源浪費的情況,例如在計算機內存中存儲了多個完全相同或者非常相似的
Head First設計模式之享元模式(蠅量模式)
logs sign face isp ria reat 定義 ogr sans 一、定義 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的
Java設計模式之享元模式實例詳解
AI ava flyweight lan trac home erro lin 代碼 本文實例講述了Java設計模式之享元模式。分享給大家供大家參考,具體如下: 解釋一下概念:也就是說在一個系統中如果有多個相同的對象,那麽只共享一份就可以了,不必每個都去實例化一個對象。比如
設計模式---對象性能模式之享元模式(Flyweight)
ret 大量 根據 利用 問題 字母 只讀 時代 帶來 一:概念 通過與其他類似對象共享數據來減少內存占用 如果一個應用程序使用了太多的對象, 就會造成很大的存儲開銷。 特別是對於大量輕量級 (細粒度)的對象,比如在文檔編輯器的設計過程中,我們如果為每個字母
設計模式的藝術 結構性模式之享元模式
前言 知道圍棋的都知道圍棋有兩種顏色的棋子,黑色和白色,不同的地方就在於他們所放置的位置不同,大體是一樣的,所以廠家生產的時候也就是批量的進行生產,反正棋子放哪他們並不需要操心,在計算機中也會存在著很多相似的物件,如果相同的物件太多將導致系統執行代價過高,記憶體屬於計算機稀缺資源,不能隨便浪費,
設計模式之享元模式(蠅量模式)
設計模式之享元模式(蠅量模式) 1. 什麼是享元模式 Flyweight模式也叫享元模式,是構造型模式之一,它通過與其他類似物件共享資料來減小記憶體佔用。 換句話說就是通過共享的方式高效地支援大量細粒度的物件。 享元模式的結構: 享元模式的角色和職責:
設計模式之享元模式(Flyweight)
設計模式之享元模式(Flyweight) 本篇為https://github.com/iluwatar/java-design-patterns/tree/master/flyweight閱讀筆記 場景 煉金術士的商店裡擺滿了魔法藥水。許多藥水是相同的,因此不需要為每
設計模式 之 享元模式
info 如果能 實例化 應用 技術 一個 對象存儲 數量 col (一) 享元模式 享元模式 : 運用共享技術有效地支持大量細粒度的對象 (二)內部狀態和外部狀態 在享元對象內部並且不會隨環境改變而改變的共享部分,可以稱為是享元對象的內部狀態,而隨環
設計模式之享元模式(Flyweight Pattern)
目的:主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。 應用例項: 1、JAVA 中的 String,如果有則返回,如果沒有則建立一個字串儲存在字串快取池裡面。 2、資料庫的資料池。 程式碼: 畫圖形的 介面,描述畫這個動作: public interface Shape {
設計模式之享元模式
享元模式定義 享元模式(Flyweight Pattern)是池技術的重要實現方式,使用共享物件可有效地支援大量的細粒度的物件。 通用類圖 具體實現 當應用程式中存在大量的物件時,程式的效能會有所下降,而且可能會造成記憶體溢位。這時除了增加硬體資源或者借用
每天一個設計模式之享元模式
作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前採用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式 :) 個人技術部落格-godbmw.com 歡迎來玩! 每週至少 1 篇原創技術分享,還有開源教程(webpack
23種設計模式之享元模式
享元模式的定義 定義: 使用共享物件可有效的支援大量的細粒度的物件 通俗的說, 就是將類的通用屬性抽出來,建立物件池,以達到限制物件數量的效果 上面定義中要求細粒度物件, 那麼不可避免的使得物件數量多且性質相近, 我們將這些物件的資訊分為兩個部分: 內部狀態和外部狀態 內部狀態是物件可以共享出來
設計模式之享元模式(結構型)
程序 aid 共享 對象 ron map 內部 系統 抽象 模式定義 享元模式(Flyweight Pattern)就是通過共享技術實現大量細粒度對象的復用。享元模式是通過細粒度對象的共享,所以也可以說享元模式是一種輕量級模式。按照Gof模式分類,享元模式屬於對象結構型模式
設計模式之享元模式(卷十一)
通過使用池的技術,有效減少了大量細粒度的物件的重複生成。 0x00 組織結構 Flyweight:抽象享元類,聲明瞭可以想外界提供內部狀態的方法,同時還可以設定外部狀態。 ConcreteFlyweight:具體享元類,通常和單例模式組合使用。 U
設計模式之享元模式(2)
本質 分離與共享。 程式碼示例 (1)定義描述授權資料的享元介面 package flyWeight; public interface FlyWeight { public b
java設計模式之享元模式Flyweight
package com.javapatterns.flyweight.simple; public class Client { private static FlyweightFactory factory; static public void main(String[] args) { fact