python设计模式(三):原型模式—快速实例化类的一种途径
原型是相对于复制、克隆而言,但是不同于模板,模板创造出的东西是一模一样,而原型创造的东西是允许差异化和个性化存在,这就是原型。
原型模式最为核心的两点是:拷贝、属性更新;拷贝指深拷贝copy.deepcopy,属性更新是类的自有属性__dict__的更新。
实例代码:
# -*- coding:utf-8 -*-
import copy
class Information:
"""个人信息"""
def __init__(self):
self.name = None
self.ager = None
self.height = None
def run(self):
"""
自我介绍方法
:return:
"""
print("我叫{}: 年龄:{} 身高:{}".format(self.name, self.ager, self.height))
class Prototype:
def __init__(self, obj):
self.copy_object = obj()
def clone(self, **attr):
obj = copy.deepcopy(self.copy_object)
obj.__dict__.update(attr)
return obj
if __name__ == '__main__':
test = Prototype(Information)
a = test.clone(name='张山', ager="30", height='170cm')
a.run()
b = test.clone(name='李飞', ager="20", height='190cm')
b.run()
要实现多个人的自我介绍,一般方法是每个人都创建一个对象,但是使用原型模式之后,只需要实例化一个对象(标准人),后面的人都已这个标准人为基础来实现个性化。
这就是原型模式的精要:定义一个原型,设计一个拷贝接口,不需要频繁实例化类,只需要拷贝yuanxing 。他的好处是可以减少因为对象实例化而产生的损耗,并实行动态装载。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python设计模式(二):建造者模式
建造者,顾名思义是修建建筑的工人,按照基本的施工方式:打桩-浇筑框架-砌墙-装修,同样的施工流程却能造就千差万别的建筑,因为不同的材料、不同设计,可以表现出千差万别,这就是建造者模式的简要理解。 示例代码: #-*-coding:utf-8-*-classBuilder(): """建造流程:原料—施工""" def__init__(self): self.materiel=None self.design=None defrun(self): print('修建完工!设计建筑:%s|购买原料:%s'%(self.design,self.materiel))classA(Builder): """方案A,修建毛坯房""" defget_materiel(self): self.materiel="砖瓦" defget_design(self): self.design="毛坯房"classB(Builder): """方案B,修建写字楼""" defget_materiel(self): self.materiel="玻璃" defget_design(self): self.desi...
- 下一篇
python设计模式(四):单例模式及创建型模式总结
单例,顾名思义是一个实例,即在一个项目之中,单例的类只实例化一次。它常常应用于数据库操作、日志函数。 在一个大型项目中使用到日志和数据库操作的地方很多,不能每个文件都去单独实例化一次,此时单例模式就显示出了他的价值。 单例的核心在类的内部方法__new__(),每次实例化都是通过执行new函数来返回实例对象。 单例就是在类里面定义一个作用域最高的标志性的属性,如果实例化过一次,那这个属性为True否则为False,那么返回上次实例化的对象。 code实例: classSingleton(object): def__new__(cls,*args,**kw): ifnothasattr(cls,'_instance'): org=super(Singleton,cls) cls._instance=org.__new__(cls,*args,**kw) returncls._instance#复写内部方法__new__() 通过hasattr函数判断该类实例化时有没有_instance属性 如果不存在,那么继承并返回原始的__new__方法给_instance属性 如果存在则直接返回_i...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境