python实现小型搜索引擎设计_Python实现:设计克隆模式
如果有分身术,你会想干嘛?一个上班一个打游戏一个学习一个帮你做家务。。。这种克隆的梦想谁都有过。当然,现实生活中还不能完全实现这个梦想,但是程序可以啊!程序的克隆是简单的,因为它天生就具备方便复制的特点。在程序设计中,也有一种思想来源于克隆这一概念,就是克隆模式。
究竟什么是克隆模式呢?
用原型实例指定要创建对象的种类,并通过拷贝这些原型的属性来创建新的对象。通过拷贝自身的属性来创建一个新对象的过程叫作 克隆模式(Clone)。
克隆模式的核心就是一个 clone 方法,clone 方法的功能就是拷贝父本的所有属性。主要包括两个过程:
分配一块新的内存空间给新的对象。
拷贝父本对象的所有属性。
浅拷贝和深拷贝浅拷贝:只拷贝引用类型对象的指针(指向),而不拷贝引用类型对象指向的值;深拷贝:可以同时拷贝引用类型对象及其指向的值。引用类型:对象本身可以修改,Python 中的引用类型有列表(List)、字典(Dictionary)、类对象。Python 在赋值的时候默认是浅拷贝。
但通过克隆的方式创建对象时,浅拷贝往往是很危险的,因为如果这个类有引用类型的属性时,一个对象的改变会引起另一个对象也改变。而深拷贝就能对一个对象的属性进行完全拷贝,这样两个对象之间就不会相互影响了,你改你的,我改我的。
在使用克隆模式时,除非一些特殊情况(如需求本身就要求两个对象一起改变),尽量使用深拷贝的方式(我们称其为 安全模式)。
克隆模式的模型抽象代码框架
克隆模式非常简单,我们可以对它进行进一步的重构和优化,抽象出克隆模式的框架模型。
类图
Clone 是克隆模式的基类,SubClassA 和 SubClassB 是具体的实现类。
Python 中由于有 copy 模块的支持,因此克隆模式实现起来非常简单,只有两个方法:深拷贝克隆 deepClone 和浅拷贝克隆 clone,大部分情况下会用深拷贝的方式。
克隆模式的设计要点
克隆模式也叫原型模式,应用场景非常广泛。在 Java 中与基类 Object 融为一体,可以随手就拿来用,只要 implements Cloneabble 接口就默认拥有了克隆的功能。而在 Python 中,克隆模式成为了语言本身的一部分,因为 Python 中对象的赋值就是一个浅拷贝的过程。但还是要区别浅拷贝和深拷贝,除非一些特殊情况,还是使用深拷贝为佳。
克隆模式的优缺点
优点:
克隆模式通过内存拷贝的方式进行复制,比 new 的方式创建对象性能更好。
通过深拷贝的方式,可以方便地创建一个具有相同属性和行为的另一个对象,特别是对于复杂对象,方便性尤为突出。
缺点:
通过克隆的方式创建对象, 不会执行类的初始化函数(_init_)。这不一定是缺点,但大家使用的时候需要注意这一点。
应用场景
如果创建新对象(如复杂对象)成本较高,我们可以利用已有的对象进行复制来获得。
类的初始化需要消耗非常多的资源时,如需要消耗很多的数据、硬件等资源。
可配合备忘录模式做一些备份的工作。
克隆模式暂时介绍到这里,想要了解更多上xue.cn可继续阅读。《人人都懂设计模式》中可以了解更多实际代码案例,让知识理解更透彻。现在可下载xue.cn app,利用碎片化时间就可以随时随地学习代码知识。
python实现小型搜索引擎设计_Python实现:设计克隆模式相关推荐
- python实现小型搜索引擎设计_基于JAVA的中小型饭店餐饮管理系统的设计与实现...
好程序设计擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON(DJANGO/FLASK).THINKPHP.C#.安卓.微信小程序.MYSQL.SQLSERVER等,欢迎咨询 今天将为 ...
- python实现小型搜索引擎设计_推荐:为图像处理初学者设计的100个问题(含python实现代码)...
本文整理了图像处理初学者应该需要了解的100个基础问题,涉及读取.显示图像.操作像素.拷贝图像.保存图像.灰度化(Grayscale).二值化(Thresholding).大津算法.HSV 变换.减色 ...
- python 怎么做界面设计_python界面设计用什么
python界面设计用什么?下面给大家介绍八款常用的界面设计的框架: Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行.它主要关注创新型 ...
- python支持面向对象设计_python 面向对象设计
从函数引出面向对象设计: 举这样一个例子: 歌手唱歌 : singer1={ 'name':'王菲', 'gender':'女', 'type':'歌手',} def singing(singer): ...
- python爬虫设计_python爬虫设计(刷访问量,赞)
需要准备的工具: 刷博客访问量的原理是:打开一次网页博客访问量就增加一次.(新浪,搜狐等博客满足这个要求) count.py import webbrowser as web import time ...
- python文档字符串格式_Python字符串及文本模式方法详解
一.你想在字符串中搜索和匹配指定的文本模式 遗漏点:re模块其实也是帮助我们进行字符串处理的重要工具,我之前总是想着用内建的函数来处理,其实如果是复杂的文本和数据结构,re模块能帮助我们处理很多信息. ...
- python连接数据库实现登录注册_python实现非数据库模式的用户注册和登录
码农公社 210.net.cn 210= 1024 10月24日一个重要的节日--码农(程序员)节 python面向函数编程,模拟用户注册和登录. 由以下两个文件来实现: 1.user.txt文 ...
- python三层设计_python 三层架构说明
原博文 2017-04-03 10:22 − python 三层架构说明 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(Presentati ...
- python课程设计博客网_python 课程设计
原博文 2019-12-09 14:56 − 泉州信息工程学院 软件学院 课程设计报告书 课 程 名: python课程设计 课程设计项目名称: &nb... 相关推荐 2019-09-28 ...
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
前面花了两篇文章来介绍词法分析和语法分析,接下来才是比较有意思的部分--一个小型类C编译器的设计和实现(其实是编译原理的课程设计啦!~)我用的是python2.7.13+PyQt来做的...事实上,正 ...
最新文章
- 全球自动驾驶汽车发展指数哪家强?美德领衔,中国第七
- 【❤️算法系列之顺序二叉树的实现(前序遍历、中序遍历、后序遍历)❤️】
- vs2013 无法打开 源 文件 SDKDDKVer.h
- jvm jinfo 参数_jinfo:JVM运行时配置的命令行浏览
- 微信搜一搜又推出了新功能!搜“医保码”直达医保页面
- 2019帝豪gs装软件_继悬浮式车顶之后,2019年这些设计将会成为主流!
- 【Shell】检查字符串大小
- svn 回退/更新/取消至某个版本命令详解
- 基于SPM8或CAT12进行的VBM分析
- word无法在公式编辑器中输入字符
- Uvalive 5713 - Qin Shi Huang's National Road System(枚举+最小瓶颈路)
- mysql内表和外表_内表查询用到外表
- 微软行星云计算Planetary Computer——previsa南美洲亚马逊雨林森林损坏系统AI智能评估
- R语言 指定列缺失值定值填充
- H3C路由器交换机配置 操作系统介绍
- php 多版本 安装包下载,wamp 安装多版本php
- 渗透测试工程师都需要什么工具呢?网络安全(三)
- 华为p20有没有计算机,华为P20评测:AI加持,性能出众
- 去除前后空白字符(包含半角空格,全角空格)
- Oracle VM VirtualBox 不可用
热门文章
- selenium.common.exceptions.WebDriverException: Message: Can't load the profile.
- Nginx实战基础篇七 最新源码包通过脚本部署LAMP搭建Discuz论坛
- 一年复一年,又单身到了光棍节
- Mac MySQL重置Root密码
- React native真机调试
- js高级学习笔记(b站尚硅谷)-13-作用域链
- feign session 调用_Feign调用session丢失解决方案
- 如何把静态成员导出_dll导入导出及local vftable问题
- 电脑中的打印驱动程序如何打包_旧驱动程序会教您如何处理笔记本电脑上的黑屏...
- 最新sfc模拟器安卓汉化版_卡车模拟器山货运卡车3D游戏安卓最新版 v1.0 卡车模拟器山货运卡车3D游戏下载...