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

本文探讨了享元模式在网站分类中的应用,通过具体Python代码实现,展示了如何利用该模式减少内存消耗并高效管理不同类型的网站实例。此外,还介绍了如何通过内部状态和外部状态来区分不同的网站使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网站类:

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



设计模式是一种解决软件设计问题的经验总结,它提供了一套可重用的设计思想和解决方案。在Python中,我们也可以应用设计模式来提高代码的可维护性、可扩展性和可复用性。下面是一些常见的设计模式Python中的实现: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。 ```python class Singleton: _instance = None def __new__(cls): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance ``` 2. 工厂模式(Factory Pattern):通过一个工厂类来创建对象,而不是直接实例化对象。 ```python class Product: def __init__(self, name): self.name = name class ProductFactory: @staticmethod def create_product(name): return Product(name) ``` 3. 观察者模式(Observer Pattern):定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象。 ```python class Subject: def __init__(self): self.observers = [] def attach(self, observer): self.observers.append(observer) def detach(self, observer): self.observers.remove(observer) def notify(self): for observer in self.observers: observer.update() class Observer: def update(self): print("Received update from subject.") ``` 以上是三个常见的设计模式Python中的简单示例,实际应用中可能会更加复杂。当然,根据具体的需求和场景,选择合适的设计模式是很重要的。希望这些示例对你有所帮助!如果你对其他设计模式感兴趣,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值