目錄傳統方案解決**展現專案
傳統方案解決**展現專案-問題分析
對原理圖的說明——即模式的角色和職責
比如圍棋、五子棋、跳棋,它們都有大量的棋子物件,圍棋和五子棋只有黑白兩色,跳棋顏色多一點。所以棋子顏色就是棋子的內部狀態;而各個棋子之間的差別就是位置的不同。當我們落子後,落子顏色是定的,但位置是變化的,所以棋子座標就是棋子的外部狀態
舉個例子:圍模理論上有 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
方法,看一下原始碼
這裡的low
和high
是多少呢?
我們通過integercache
中原始碼大概基本分析出
所以當integer
在[-128, 127]
時,會返回integercache
的cache
陣列內容;否則,valueof
方法相當於new integer
了
也就是說,integer.valueof(x)
方法使用的就是享元模式
另外,我們也可以分析出:
設計模式從入門到精通 設計模式對比
目錄首先,看下各個模式的定義 通過一張 總結其區別 抽象工廠模式 建造者模式 模板方法模式 建立型模式 結構型模式 關注的是物件的建立 關注的是物件的建立 關注的是物件的方法結構 關注的是具體產品的建立 關注的是複雜物件的建造過程 關注的是演算法框架 產品之間一般無關係 建造過程有關係,這些建造過程...
python 享元模式 大話設計模式之享元模式
享元模式可以避免大量的非常相似的類的開銷。在程式設計中,有時需要生成大量的細顆粒度的類例項來表示資料,如果能發現這些例項除了幾個引數外基本上都是相同的,如果能把那些引數移到類的例項的外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度地減少單個例項的數目。也就是說,享元模式執行時所需要的狀態是有內...
設計模式從入門到精通 設計模式大雜燴
目錄2 設計模式補充 要使得系統功能專業而單一,降低物件與物件之間 各個功能模組之間的依賴和耦合 don t call us,we ll call you 不要打 給我們,我們會打 給你 這是著名的 好萊塢 原則。在好萊塢,把簡歷遞交給演藝公司後就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員...