二十八 享元模式

2022-02-25 19:09:13 字數 2098 閱讀 1194

享元模式:

flyweight:運用共享技術有效地支援大量細粒度的物件

注意:

如果乙個應用程式使用了大量的物件,而大量的這些物件造成很大的儲存開銷時就要考慮使用;

物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以使用相對較少的共享物件取代很多組物件,此時可以考慮使用。

實際上在.net中,字串string就是運用了flyweight模式。object.referenceequals(objectobja,object objb)方法是用來確定obja和objb是否是相同例項,返回bool值:

stringa=」設計模式」;

stringb=」設計模式」;

console.writeline(object.referenceequals(a,b));

返回值是true,這兩個字串是相同例項

如在圍棋,象棋,五子棋等遊戲開發時,我們只要例項化乙個棋子物件,把棋子顏色,座標等作為棋子的外部狀態。

demo1

using system.collections;

class websitefactory//**工廠

private hashtable flyweights = new hashtable();

//獲得**分類

public websitegetwebsitecategory(stringkey)

if (!flyweights.containskey(key))

flyweights.add(key,newconcretewebsite(key));

return ((website)flyweights[key]);

//獲取**總數

public int getwebsitecount()

return flyweights.count;

abstract class website//**抽象類

public abstract void use(user user);

class concretewebsite : website//具體**類

private string name = "";

public concretewebsite(string name)

this.name = name;

public override void use(user user)

//使用者

public class user

private string name;

public user(string name)

this.name = name;

public string name

get

static void main(stringargs)

websitefactory f = new websitefactory();

website fx = f.getwebsitecategory("產品展示");

fx.use(new user("小菜"));

website fy = f.getwebsitecategory("產品展示");

fy.use(new user("大鳥"));

website fz = f.getwebsitecategory("產品展示");

fz.use(new user("嬌嬌"));

website f1 = f.getwebsitecategory("部落格");

f1.use(new user("老頑童"));

website f2 =f.getwebsitecategory("部落格");

f2.use(new user("桃谷六仙"));

website f3 = f.getwebsitecategory("部落格");

f3.use(new user("南海鱷神"));

console.writeline("**分類總數為", f.getwebsitecount());

console.readkey();

享元模式(二十)

享元模式 運用共享技術有效地支援大量細粒度的物件。比如做乙個網頁,但是會有不同的用途,有時是展示產品,有時展示部落格。實際開發中,如果每次都建立乙個新的物件,開銷很大,所以我們用乙個集合將物件存起來,後面有用到相同物件的直接從集合中取出,這就是享元模式的思想。舉個例子 public abstract...

二十八 模組

模組 在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 module 使用模組有...

Lua程式設計(二十八)

lua語言會在執行源 之前先對其進行預編譯。生成預編譯檔案 也被稱為二進位制檔案,binary chunk 的最簡單方式是,使用標準發行班中附帶的luac程式。luac o prog.lc prog.lua上述命令會建立檔案prog.lua的預編譯版本prog.lc。lua解析器會像執行普通lua ...