大话设计模式Python实现- 享元模式

Posted 世界有你更精彩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

以上是关于大话设计模式Python实现- 享元模式的主要内容,如果未能解决你的问题,请参考以下文章

大话设计模式-享元模式

Python《大话设计模式》Python版代码实现

《大话设计模式》Python版代码实现

设计模式理解结构型——享元(Flyweight)

大话设计模式结构型模式总结

大话涉及模式Python实现-策略模式