享元模式:運用共享技術有效地支持大量細粒度的對象。
享元模式和單例模式類似的地方。共通的思路,就是同一類對象之創建一個實例,享元模式在此基礎上進一步加工。利用工廠模式來返回需要的對象。
from abc import ABCMeta, abstractmethod
class Website(metaclass=ABCMeta):
def __init__(self, name):
self.name = name
@abstractmethod
def use(self, user):
pass
class ConcreteWebsite(Website):
def __init__(self, name):
super().__init__(name)
def use(self, user):
print("{0} uses {1}".format(user.name, self.name))
class User:
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
class WebsiteFactory:
def __init__(self):
self.website = {}
def get_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