享元模式:运用共享技术有效地支持大量细粒度的对象。
享元模式和单例模式类似的地方。共通的思路,就是同一类对象之创建一个实例,享元模式在此基础上进一步加工。利用工厂模式来返回需要的对象。
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