大话设计模式(Python版)--享元模式

网站类:

#!/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()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值