作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python设计模式之享元模式原理与用法实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了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 。
最后此篇关于Python设计模式之享元模式原理与用法实例分析的文章就讲到这里了,如果你想了解更多关于Python设计模式之享元模式原理与用法实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!