設計模式從入門到精通 10 享元模式

2022-09-19 03:06:15 字數 2976 閱讀 2523

目錄傳統方案解決**展現專案

傳統方案解決**展現專案-問題分析

對原理圖的說明——即模式的角色和職責

比如圍棋、五子棋、跳棋,它們都有大量的棋子物件,圍棋和五子棋只有黑白兩色,跳棋顏色多一點。所以棋子顏色就是棋子的內部狀態;而各個棋子之間的差別就是位置的不同。當我們落子後,落子顏色是定的,但位置是變化的,所以棋子座標就是棋子的外部狀態

舉個例子:圍模理論上有 361 個空位可以放棋子,每盤棋都有可能有兩三百個棋子物件產生。因為記憶體空間有限,一台伺服器很難支援更多的玩家玩圍模遊戲。如果用享元模式來處理棋子,那麼棋子物件就可以減少到只有兩個例項,這樣就很好的解決了物件的開銷問題

原理類圖

uml 類圖

核心**

/**

* 內部狀態,共享角色

*/public enum type

/** * 外部狀態,非共享角色

*/public class user

public string getname()

public void setname(string name)

}/**

* 抽象的享元角色

*/public abstract class website

/** * 具體的享元角色

*/public class concretewebsite extends website

@override

public void use(user user)

}/**

* 享元工廠類

*/public class websitefactory

return pool.get(type);

}public static integer getsize()

}

測試

website newswebsite = websitefactory.getwebsitecategory(type.新聞);

newswebsite.use(new user("tom"));

website blogwebsite1 = websitefactory.getwebsitecategory(type.部落格);

blogwebsite1.use(new user("jerry"));

website blogwebsite2 = websitefactory.getwebsitecategory(type.部落格);

blogwebsite2.use(new user("john"));

website blogwebsite3 = websitefactory.getwebsitecategory(type.部落格);

blogwebsite3.use(new user("smith"));

wxwebsite.use(new user("mack"));

system.out.println(websitefactory.getsize());

//3

首先先看一段**測試

integer x = integer.valueof(127);

integer y = new integer(127);

integer z = integer.valueof(127);

integer w = new integer(127);

system.out.println(x.equals(y)); // true

system.out.println(x == y); // false

system.out.println(x == z); // true

system.out.println(w == x); // false

system.out.println(w == y); // false

我們知道:equals比較的是物件的內容,==比較的是物件的例項

我們追蹤一下integer物件的valueof方法,看一下原始碼

這裡的lowhigh是多少呢?

我們通過integercache中原始碼大概基本分析出

所以當integer[-128, 127]時,會返回integercachecache陣列內容;否則,valueof方法相當於new integer

也就是說,integer.valueof(x)方法使用的就是享元模式

另外,我們也可以分析出:

設計模式從入門到精通 設計模式對比

目錄首先,看下各個模式的定義 通過一張 總結其區別 抽象工廠模式 建造者模式 模板方法模式 建立型模式 結構型模式 關注的是物件的建立 關注的是物件的建立 關注的是物件的方法結構 關注的是具體產品的建立 關注的是複雜物件的建造過程 關注的是演算法框架 產品之間一般無關係 建造過程有關係,這些建造過程...

python 享元模式 大話設計模式之享元模式

享元模式可以避免大量的非常相似的類的開銷。在程式設計中,有時需要生成大量的細顆粒度的類例項來表示資料,如果能發現這些例項除了幾個引數外基本上都是相同的,如果能把那些引數移到類的例項的外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度地減少單個例項的數目。也就是說,享元模式執行時所需要的狀態是有內...

設計模式從入門到精通 設計模式大雜燴

目錄2 設計模式補充 要使得系統功能專業而單一,降低物件與物件之間 各個功能模組之間的依賴和耦合 don t call us,we ll call you 不要打 給我們,我們會打 給你 這是著名的 好萊塢 原則。在好萊塢,把簡歷遞交給演藝公司後就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員...