(十二)設計模式 享元模式

2021-10-02 23:35:15 字數 1761 閱讀 9395

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

如果要做三個產品展示、三個部落格的**,相當於是六個**類的例項,每乙個**都需要乙個對應的伺服器資源,而本質上他們都是同一套**,如果**增多,例項也就隨著增多,這對伺服器的資源浪費得很嚴重,而且都不是屬於高訪問量的**,如果整合到乙個**中,共享其相關的**和資料,那麼對於伺服器資源都可以達成共享,減少伺服器資源,而對於**,由於是乙份例項,維護和擴充套件都更加容易。

使用者:使用者 類,用於**的客戶賬號,是」**「類的外部狀態

**:抽象類所有具體享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態。

**工廠:乙個享元工廠,用來建立並管理flyweight物件。它主要是用來確保合理地共享flyweight,當使用者請求乙個flyweight時,flyweightfactory物件提供乙個已建立的例項或者建立乙個(如果不存在的話)

具體**:繼承flyweight超類或實現flyweight介面,並為內部狀態增加儲存空間。也可以指那些不需要共享的flyweight子類。因為flyweight介面成為可能,因為它並不強制共享。

(1)、user(使用者類,用於**的客戶賬號,是"**"類的外部狀態)

public

class

user

public string getname()

}

(2)、website (**抽象類)
public

abstract

class

website

(3)、concretewebsite (具體**)
public

class

concretewebsite

extends

website

@override

public

void

use(user user)

}

(4)、websitefactory (**工廠類)
public

class

websitefactory

return

(website) flyweights.

get(key);}

//獲得**分類總數

public

intgetwebsitecount()

}

public

static

void

main

(string[

] args)

輸出:

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

如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時就應該考慮使用;還有就是物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多陣列物件,此時可以考慮使用享元模式。

參考:《大話設計模式》

設計模式 十二 享元模式

設計模式 一 設計六大原則 設計模式 二 單例模式的七種寫法 設計模式 三 建造者模式 設計模式 四 簡單工廠模式 設計模式 五 觀察者模式 設計模式 六 模式 設計模式 七 裝飾模式 設計模式 八 外觀模式 設計模式 九 模版方法模式 設計模式 十 工廠方法模式 設計模式 十一 策略模式 設計模式...

設計模式(十二)享元模式

如果系統中可能存在大量相同的物件,那麼我們可以建立快取池之類的東西,將這些重複物件進行復用。這種設計模式就是享元模式。假設有乙個遊戲,裡面需要汽車和電單車兩種載具。我們希望這些載具可以在遊戲中復用,而不是每次都建立新物件。所以這個例子就可以使用享元模式來做。首先是汽車和電單車的抽象。我們使用visi...

(十二)享元模式

public inte ce flyweight public class concreteflyweight implements flyweight public string getname public void setname string name public void execute...