設計模式之十五 享元模式

2021-10-07 09:30:12 字數 1578 閱讀 7985

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

享元模式和單例模式類似的地方。共通的思路,就是同一類物件之建立乙個例項,享元模式在此基礎上進一步加工。利用工廠模式來返回需要的物件。

from abc import abcmeta, abstractmethod

class

website

(metaclass=abcmeta)

:def

__init__

(self, name)

: self.name = name

@abstractmethod

defuse(self, user)

:pass

class

concretewebsite

(website)

:def

__init__

(self, name)

:super()

.__init__(name)

defuse

(self, user)

:print

(" uses "

.format

(user.name, self.name)

)class

user

:def

__init__

(self, name)

: self.__name = name

@property

defname

(self)

:return self.__name

@name.setter

defname

(self, value)

: self.__name = value

class

websitefactory

:def

__init__

(self)

: self.website =

defget_website

(self, website_type)

:if website_type not

in self.website.keys():

self.website[website_type]

= concretewebsite(website_type)

return self.website[website_type]

if __name__ ==

"__main__"

: user = user(

"li"

) web_factory = websitefactory(

) website = web_factory.get_website(

"blog"

) website.use(user)

user.name =

"wang"

website = web_factory.get_website(

"production demonstration"

) website.use(user

設計模式十五 享元模式

享元模式定義 運用共享技術有效地支援大量細粒度地物件。初步理解 的共享,不同的使用者使用時,存在不同的資料,因此在呼叫方法時傳入封裝使用者資訊的物件即可。code 每件體育用品的功能是相同的,因此體育用品是共享的,但是使用體育用品的人是不一樣的。體育用品的基類 public inte ce shar...

設計模式之享元模式

1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...

設計模式之 享元模式

享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...