zoukankan      html  css  js  c++  java
  • 大话设计模式Python实现- 享元模式

    享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象.

    下面是一个享元模式的demo:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 __author__ = 'Andy'
     5 """
     6 大话设计模式
     7 设计模式——享元模式
     8 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象
     9 对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个实例,减少内存的开销
    10 """
    11 # 抽象网站类
    12 class Website(object):
    13 
    14     def use(self):
    15         pass
    16 
    17 # 具体网站类
    18 class ConcreteWebsite(Website):
    19 
    20     def __init__(self, name):
    21         self.name = name
    22 
    23     def use(self):
    24         print "网站分类",self.name
    25 # 不共享的网站类
    26 class UnshareConcreteWebsite(Website):
    27     def __init__(self, name):
    28         self.name = name
    29 
    30     def use(self):
    31         print "不共享网站分类",self.name
    32 
    33 # 网站工厂
    34 class WebsiteFactory(object):
    35 
    36     def __init__(self):
    37         self.hashtable = dict()
    38 
    39     # 获取网站类  如果存在直接返回,如果不存在建好之后返回
    40     def get_website(self, key):
    41         if not key in self.hashtable:
    42             self.hashtable[key] = ConcreteWebsite(key)
    43         return self.hashtable[key]
    44 
    45     # 网站实例的个数
    46     def get_website_count(self):
    47         return len(self.hashtable.keys())
    48 
    49 if __name__ == "__main__":
    50     factory = WebsiteFactory()
    51     f1 = factory.get_website("blog")
    52     f2 = factory.get_website("blog")
    53     f3 = factory.get_website("blog")
    54     f4 = factory.get_website("website")
    55     f5 = factory.get_website("website")
    56     f6 = factory.get_website("website")
    57     f7 = UnshareConcreteWebsite("test")
    58     f1.use()
    59     f2.use()
    60     f3.use()
    61     f4.use()
    62     f5.use()
    63     f6.use()
    64     f7.use()

    上面类的设计如下图:

    享元模式可以避免大量非常相似类的开销,在程序设计中,有时会生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本相同,就可以把参数已到实例外面,在方法调用时,把它们传进来,就可以通过共享大幅度减少单个实例的数目


    作者:Andy
    出处:http://www.cnblogs.com/onepiece-andy/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    自娱自乐
    项目冲刺(2)-第二、第三天
    项目冲刺(2)-第一天
    Beta版本冲刺计划及安排
    第一章 构造过程抽象
    python 学习2
    python 学习1
    ionic 初入门
    NodeJS学习
    软件工程实践总结作业——个人作业
  • 原文地址:https://www.cnblogs.com/onepiece-andy/p/python-flyweight-pattern.html
Copyright © 2011-2022 走看看