python设计模式免费_python 设计模式

标签:介绍

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

分类

经典的《设计模式》一书归纳出23种设计模式,这23种模式又可归为,创建型、结构型和行为型3大类,

创建型模式:简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、创建者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)。

结构型模式:外观模式(Facade)、适配器模式(Adapter)、代理模式(Proxy)、装饰模式(Decorator)、桥模式(Bridge)、组合模式(Composite)、享元模式(Flyweight)。

行为型模式:模板方法模式(Template Method)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、职责链模式(Chain of Responsibility)、命令模式(Command)、访问者模式(Visitor)、调停者模式(Mediator)、备忘录模式(Memento)、迭代器模式(Iterator)、解释器模式(Interpreter)。

模型设计六大原则

1. 开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2. 里氏代换原则(Liskov Substitution Principle)

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科

这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

4. 接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

5. 迪米特法则(最少知道原则)(Demeter Principle)

为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6. 合成复用原则(Composite Reuse Principle)

原则是尽量使用合成/聚合的方式,而不是使用继承。

简单工厂模型

代码

#!/usr/bin/env python

# -*- coding:utf-8 -*-

class Shape(object):

def draw(self):

raise NotImplementedError

class Circle(Shape):

def draw(self):

print(‘draw Circle‘)

class Square(Shape):

def draw(self):

print(‘draw Square‘)

class Rectangle(Shape):

def draw(self):

print(‘draw Rectangle‘)

class ShapeFactory(object):

def create(self, shape):

if shape == ‘Circle‘:

return Circle()

elif shape == ‘Rectangle‘:

return Rectangle()

else:

return Shape()

fac = ShapeFactory()

obj = fac.create(‘Circle‘)

obj.draw()

优点:客户端不需要修改代码。

缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。

工厂方法模型

标签:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode笔记】72. 编辑距离(Java、字符串、动态规划)

文章目录题目描述思路 && 代码 O(n2n^2n2)、O(n2n^2n2)二刷打卡第十三天~ 题目描述 感觉和正则表达式匹配这道题很像:同样的两个字符串,同样的二维数组dp,同样的hard。。 思路 && 代码 O(n2n^2n2)、O(n2n^2n2…

超级外链工具_哪些SEO排名工具是有效的呢?

SEO的发展到现在已经有十多年的时间,出现的大大小小的SEO工具也有上百种,这些SEO工具的背景和作用是不同的。大致可以分为两类:一类是SEO建议工具,帮助诊断网站给出优化分析建议;另一类是可以直接帮助网站排名的工具&a…

【LeetCode笔记】416. 分割等和子集(Java、动态规划、背包问题、滚动数组)

文章目录题目描述思路 && 代码1. 动态规划 O(nc) 、O(nc)2. 结合滚动数组 O(nc)、O(c)二刷打卡第十四天~熬夜也得把题目补上 题目描述 初看题目,想到的思路是用记忆化DFS来找结果来着。。看了题解才知道是背包问题 思路 && 代码 1…

python 网络摄像头安装图解_网络摄像头在opencv-python和opencv-contrib-python...

我一直在使用anaconda在python中的opencv中遇到网络摄像头问题.问题如下:如果通过以下两种方式之一安装了opencv,则无法打开网络摄像头:pip install opencv-python(可用的3.1、3.2、3.3),或pip install opencv-contrib-python(可用3.2,3.3)但是,只有当我…

【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)

文章目录题目描述思路 && 代码1. 动态规划 O(n2n^2n2)、O(n2n^2n2)(最方便理解,初版)2. 转换成 01 背包问题 O(n2n^2n2)、O(nnn)二刷离谱!添加了测试用例,上面的代码需要添加负数条件了(见下面的代…

2007年上半年软件测试_洪恩教育成功登陆纽交所,上市首日大涨超33%!成2020年首家美股上市的中国教育公司...

洪恩教育(IH)在美国纽交所上市,发行价为12美元,位于发行区间11到13美元的中间位置。洪恩教育此次发行700万股ADS,募资资金总额为8400万美元(假设超额配售权未获行使)。洪恩教育此次绿鞋前估值为…

高德地图画带箭头的线_精选 | 这款充电线逆天了!一条顶三条,让其它线都“下岗”吧...

随着电子设备越来越多越来越多越来越乱的充电线成了我们每天面临的烦恼各种线材多起来真心闹心缠绕打结,一团乱麻外出携带更是不方便。。。而人生更悲惨的事莫过于3人开黑时手机突然没电且只有一个电源一款可彻底改变这些烦恼的充电神器——倍思可伸缩一拖三数据线。…

【LeetCode笔记】581. 最短无序连续子数组(Java、数组)

文章目录题目描述思路 && 代码1. 排序法 O(nlogn)、O(n)2. 记录 max[ ]、min[ ] 的写法 O(n)、O(n)3. 记录 max、min 的写法 O(n)、O(1)二刷打卡第十五天~ 前两天有事断签了,要继续加油噢! 题目描述 主要是,需…

华为usg6000配置手册_带你了解防火墙安全区域的作用及简单的配置,小白不要错过了...

上一篇文章《防火墙入门基础之登录Web配置界面》已经简单的介绍了关于华为防火墙的如何配置Web登录,也开始接触了关于防火墙安全区域的基本概念。其实防火墙安全区域是一个非常重要的概念,简称为区域(Zone)。安全区域是一个或多个接口的集合,…

【LeetCode笔记】621. 任务调度器(Java、桶)

文章目录题目描述代码 && 思路1. 直白的 ac 做法 O(n)、O(n)2. 桶排思想的做法 O(n)、O(n)二刷打卡第十六天~ 题目描述 有点阅读题的意思,可以结合例子理解一下题干~ 代码 && 思路 1. 直白的 ac 做法 O(n)、O(n) 同样是…

python 截取字符串6位_在Python中从字符串获取x个最低有效位

How can I get the x LSBs from a string (str) in Python?In the specific I have a 256 bits string consisting in 32 chars each occupying 1 byte, from wich i have to get a "char" string with the 50 Least Significant Bits.解决方案I think that a possi…

【LeetCode笔记】162. 寻找峰值(Java、二分、偏数学)

文章目录题目描述思路 && 代码1. 暴力法 O(n)2. 二分法 O(logN)二刷打卡第十七天~ 题目描述 难点在于 logN 复杂度 思路 && 代码 1. 暴力法 O(n) 最简单的做法,直接遍历判断即可。 class Solution {public int findPeakElement(in…

pca图像压缩python_基于PCA的图像降维及图像重构

1 PCA简述PCA(Principal Component Analysis)主成分分析算法,在进行图像识别以及高维度数据降维处理中有很强的应用性,算法主要通过计算选择特征值较大的特征向量来对原始数据进行线性变换,不仅可以去除无用的噪声,还能减少计算量…

【知识补充】对称加密、非对称加密、数字签名与DDoS攻击

文章目录一. 对称加密1)知识点2)具体算法1. DES2. 3DES3. AES二. 非对称加密(公钥密码)1)知识点2)具体算法RSA三. 数字签名1)知识点四. DDoS 攻击1)直接 DDos 攻击2)反射…

python导出excel文件数字签名_Python使用RSA+MD5实现数字签名

数字签名主要有防抵赖和防篡改两种功能:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名,二是能确定消息的完整性。作为具体实现,发送报文时,发送方用一个哈希函数(例如MD5、SHA-1、SHA-256…

【LeetCode笔记】76. 最小覆盖子串(字符串、滑动窗口)

文章目录题目描述思路 && 代码二刷最近一直在充电基础知识、维护 leetcode 总结博客 今天继续摸一摸新题目吧~ 题目描述 感觉和 03. 无重复的最长子串 有点像,都是在字符串上用滑动窗口来找子串。并且都是属于那种,解决一次以后&…

python和revit_Revit中Python脚本使用技术训练视频教程

本视频教程是由Lynda机构出品的Revit中Python脚本使用技术训练视频教程,时长:3小时08分,大小:500 MB,MP4高清视频格式,附工程源文件,教程使用软件:Python, Revit, Dynamo Studio&…

【LeetCode笔记】84. 柱状图中最大的矩形(字符串、单调栈)

文章目录题目描述思路 && 代码二刷题目描述 和接雨水有点像,但是具体做法还是有点不同。 思路 && 代码 暴力法只能过 94 / 96 的样例:复杂度O(n^2) & O(1),一个双重循环遍历所有可行矩阵。 这里就直接用 O(n) & O…

毫秒值转换为日期工具_为机器学习准备数据

将数据转化为见解并不是神奇的事情。您必须首先了解您的数据,并使用它来创建驱动操作的报告。如果您的竞争对手使用机器学习和人工智能来自动推动行动,而您却没有,那您​​将处于不利地位。为ML和AI准备好数据涉及将结构化和半结构化数据集组…

【LeetCode笔记】剑指 Offer 55 - II. 平衡二叉树(递归、二叉树)

文章目录题目描述思路 && 代码二刷一脸懵逼,居然没写这道题的题解。。 题目描述 思路 && 代码 思路:平衡二叉树判断公式 左子树满足 右子树满足 左右子树高度差不超过1 /*** Definition for a binary tree node.* public class Tre…