网站类:
#!/usr/bin/env python
class WebSite:
def __init__(self, name):
self.__name = name
def Use(self):
print('classify website:',self.__name)
def main():
ps = WebSite('Product Show')
ps.Use()
ps2 = WebSite('Product Show')
ps2.Use()
ps3 = WebSite('Product Show')
ps3.Use()
ps4 = WebSite('blog Show')
ps4.Use()
if __name__ == '__main__':
main()
享元模式v1:
#!/usr/bin/env python
from abc import ABCMeta,abstractmethod
class Flyweight:
__metaclass__ = ABCMeta
@abstractmethod
def Operation(self, extrinsicstate):
pass
class ConcreteFlyweight(Flyweight):
def Operation(self, extrinsicstate):
print('concrete Flyweight:',extrinsicstate)
class UnShareConcreteFlyweight(Flyweight):
def Operation(self, extrinsicstate):
print('unshared concrete Flyweight:',extrinsicstate)
class FlyweightFactory:
def __init__(self):
self.__flyweights = dict()
self.__flyweights['X'] = ConcreteFlyweight()
self.__flyweights['Y'] = ConcreteFlyweight()
self.__flyweights['Z'] = ConcreteFlyweight()
def GetFlyweight(self, key):
return self.__flyweights[key]
def main():
extrinsicstate = 22
ff = FlyweightFactory()
fwx = ff.GetFlyweight('X')
fwx.Operation(extrinsicstate)
fwy = ff.GetFlyweight('Y')
fwy.Operation(extrinsicstate)
fwz = ff.GetFlyweight('Z')
fwz.Operation(extrinsicstate)
usfw = UnShareConcreteFlyweight()
usfw.Operation(extrinsicstate)
if __name__ == '__main__':
main()
网站共享代码:
#!/usr/bin/env python
from abc import ABCMeta, abstractmethod
class WebSite:
__metaclass__ = ABCMeta
def Use(self):
pass
class ConcreteWebSite(WebSite):
def __init__(self, name):
self.__name = name
def Use(self):
print('website classify:',self.__name)
class WebSiteFactory:
def __init__(self):
self.__flyweights = dict()
def GetWebSiteCategory(self, key):
if(key not in self.__flyweights):
self.__flyweights[key] = ConcreteWebSite(key)
return self.__flyweights[key]
def GetWebSiteCount(self):
return len(self.__flyweights)
def main():
wsf = WebSiteFactory()
fx = wsf.GetWebSiteCategory('X')
fx.Use()
fy = wsf.GetWebSiteCategory('Y')
fy.Use()
fps = wsf.GetWebSiteCategory('product show')
fps.Use()
fb = wsf.GetWebSiteCategory('blog')
fb.Use()
print('the total number of website is',wsf.GetWebSiteCount())
if __name__ == '__main__':
main()
内部状态与外部状态
#!/usr/bin/env python
from abc import ABCMeta, abstractmethod
class User:
def __init__(self,name):
self.__name = name
@property
def Name(self):
return self.__name
class WebSite:
__metaclass__ = ABCMeta
@abstractmethod
def Use(self, use):
pass
class ConcreteWebSite(WebSite):
def __init__(self, name):
self.__name = name
def Use(self, user):
print("website classify :",self.__name,"user: ",user.Name)
class WebSiteFactory:
def __init__(self):
self.__flyweights = dict()
def GetWebSiteCategory(self, key):
if(key not in self.__flyweights):
self.__flyweights[key] = ConcreteWebSite(key)
return self.__flyweights[key]
def GetWebSiteCount(self):
return len(self.__flyweights)
def main():
wsf = WebSiteFactory()
fx = wsf.GetWebSiteCategory('X')
fx.Use(User('freshman'))
fy = wsf.GetWebSiteCategory('Y')
fy.Use(User('BigBird'))
fps = wsf.GetWebSiteCategory('product show')
fps.Use(User('Lily'))
fb = wsf.GetWebSiteCategory('blog')
fb.Use(User('Lucy'))
print('the total number of website is',wsf.GetWebSiteCount())
if __name__ == '__main__':
main()