Java設計模式 享元模式(Flyweight)

2021-09-13 23:17:53 字數 1520 閱讀 1801

缺點

抽象享元角色(flyweight)

/**

* 抽象享元角色

* * @author yanbin

* @version 2018/5/28 11:36

* **/

public

inte***ce

flyweight

具體享元角色(concreteflyweight)
/**

* 具體享元角色:

* * @author yanbin

* @version 2018/5/28 11:37

* **/

public

class

concreteflyweight

implements

flyweight

}

不可共享的享元角色(unsharedconcreteflyweight)
/**

* 不共享具體享元角色

* * @author yanbin

* @version 2018/5/28 11:38

* **/

public

class

unsharedconcreteflyweight

implements

flyweight

}

享元工廠(flyweightfactory)
/**

* 享元工廠角色

* * @author yanbin

* @version 2018/5/28 11:39

* **/

public

class

flyweightfactory

return flyweights.

get(key);}

}

客戶端
/**

* 享元模式:採用乙個共享類來避免大量擁有相同內容的「小類」的開銷。享元模式中區分了內蘊狀態和外蘊狀態。內蘊狀態就是共性,外蘊狀態就是個性了。

* 內蘊狀態儲存在享元內部,不會隨環境的改變而有所不同,是可以共享的;外蘊狀態是 不可以共享的,它隨環境的改變而改變的,因此外蘊狀態是由客戶端來保持

* 享元模式分為:單純享元模式和復合享元模式。

* 單純享元模式的結構組成:抽象享元角色;具體享元角色;享元工廠角色;客戶端角色。

* 復合享元模式的結構組成:抽象享元角色;具體享元角色;復合享元角色;享元工廠角色;客戶端角色。

* 優點:它能夠大幅度的降低記憶體中物件的數量

* 缺點:使得系統邏輯複雜化,而且在一定程度上外蘊狀態影響了系統的速度。

* * @author yanbin

* */

public

class

flyweightpattern

}

Java 設計模式 享元模式

在介紹享元模式之前,先來看乙個問題。假設要你去做一款撲克牌遊戲,你會針對撲克牌設計一種怎樣的資料結構呢?因為撲克牌有四種花色,也即紅桃 heart 黑桃 spade 方塊 diamond 梅花 club 有 13 種不同的大小,也即 a k 還有大小王,所以這個類應該很好設計,如下所示 public...

java設計模式 享元模式

使用共享物件可有效地支援大量細粒度物件 因為分配太多的物件到應用程式中將有損程式的效能,同時還容易造成記憶體溢位.1.內部狀態是物件可共享出來的資訊,儲存在享元物件的內部並且不會隨環境的改變而改變.他們可以作為乙個物件的動態附加資訊,不必直接儲存在具體的某個物件中,屬於可以共享的部分.2.外部狀態是...

JAVA設計模式 享元模式

享元模式 運用共享技術有效地支援大量細粒度的物件。介面有方法,具體類實現介面中的方法,工廠生產該實體,若存在則直接返回,不存在則new乙個新的物件返回,無論客戶端呼叫多少次,只產生了乙個實體。享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果這些例項除...