本文实例讲述了python设计模式之享元模式原理与用法。分享给大家供大家参考,具体如下:
享元模式(flyweight pattern):运用共享技术有效地支持大量细粒度的对象.
下面是一个享元模式的demo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'andy' """ 大话设计模式 设计模式——享元模式 享元模式(flyweight pattern):运用共享技术有效地支持大量细粒度的对象 对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个实例,减少内存的开销 """ # 抽象网站类 class website( object ): def use( self ): pass # 具体网站类 class concretewebsite(website): def __init__( self , name): self .name = name def use( self ): print "网站分类" , self .name # 不共享的网站类 class unshareconcretewebsite(website): def __init__( self , name): self .name = name def use( self ): print "不共享网站分类" , self .name # 网站工厂 class websitefactory( object ): def __init__( self ): self .hashtable = dict () # 获取网站类 如果存在直接返回,如果不存在建好之后返回 def get_website( self , key): if not key in self .hashtable: self .hashtable[key] = concretewebsite(key) return self .hashtable[key] # 网站实例的个数 def get_website_count( self ): return len ( self .hashtable.keys()) if __name__ = = "__main__" : factory = websitefactory() f1 = factory.get_website( "blog" ) f2 = factory.get_website( "blog" ) f3 = factory.get_website( "blog" ) f4 = factory.get_website( "website" ) f5 = factory.get_website( "website" ) f6 = factory.get_website( "website" ) f7 = unshareconcretewebsite( "test" ) f1.use() f2.use() f3.use() f4.use() f5.use() f6.use() f7.use() |
运行结果:
上面类的设计如下图:
享元模式可以避免大量非常相似类的开销,在程序设计中,有时会生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本相同,就可以把参数已到实例外面,在方法调用时,把它们传进来,就可以通过共享大幅度减少单个实例的数目
希望本文所述对大家python程序设计有所帮助。
原文链接:https://www.cnblogs.com/onepiece-andy/p/python-flyweight-pattern.html