大話設計模式二十六 享元模式(專案多也別傻做)

2021-06-18 13:35:05 字數 1014 閱讀 6203

享元模式:

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

// **抽象類

public abstract class website

// 具體**類

public class concretewebsite extends website

@override

public void use(user u)

public string getname()

public void setname(string name)

}// 產生**的工廠

public class websitefactory

return flyweights.get(key);

} public int getwebsitecount()

}// 使用者類

public class user

public string getname()

public void setname(string name)

}// 客戶端

public class flyweightmain

}

什麼時候用享元模式:

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

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

具體應用:

圍棋和五子棋只有黑白兩色,所以顏色應該是棋子的內部狀態,而各個棋子之間的差別主要就是位置的不同,所以方位座標應該是棋子的外部狀態,對於圍棋,一盤棋理論上有361個空位可以放棋子,那如果用常規的物件導向來程式設計,每盤棋都可能有兩三百個棋子物件產生,一台伺服器就很難支援更多的玩家玩圍棋遊戲了,畢竟記憶體空間是有限的,如果用享元模式來處理棋子,那麼棋子物件就可以減少到只有兩個例項。

大話設計模式 享元模式

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

《大話設計模式 享元模式》筆記

1 享元模式 flyweight 運用共享技術有效的支援大量細顆粒度的物件。2 享元模式結構圖 3 簡單 實現 flyweight類,它是所有享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態。public abstract class flyweightconcretef...

java 享元模式(大話設計模式)

所有具體享元類的超類,接受並作用於外部狀態 author administrator public abstract class flyweight class concreteflyweight extends flyweight class unsharedconcreteflyweight e...