一、什么是设计模式

1、设计模式的定义

2、注意事项

设计模式就是底层实现起来麻烦,上层调用简单

设计模式就是“有一个套路 ,分几个类,几个方法,几个属性”

3、为什么要有设计模式

在面向对象之前用的面向过程,小软件,需求不断增加,代码量爆增,大家的代码合并不了,几百万几千万的项目都不能交付,爆发了软件危机,才有了软件工程,设计模式,面向对象

二、讲在设计模式之前

1、封装

1、对象的行为对于外部世界来说就是不可见的,或者说对象的状态信息是私密的

2、客户端不能通过直接操作来改变对象的内部状态。相反,客户端需要通过发送消息来请求对象改变其内部状态。对象可以根据请求的类型,通过特定的成员函数(例get和set)改变他们的内部状态,

  以做出相应的响应

3、在python中,封装(数据和方法的隐藏)的概念不是隐式的,因为它没有提供封装所需的关键字,诸如public、private和protected(在诸如c++或java之类的语言汇总,都提供了这些关键字)

  当然,如果在变量或函数名 前加上前缀_,就可以将其可访问性变为私有

4、私有属性很重要

2、继承

多态的两种类型

对象根据输入参数提供方法的不同实现

不同类型的对象可以使用相同的接口

对于python来说,多态是该语言的内置功能,例如操作符"+"可以应用于两个整数以进行加法运算,也可以应用于字符串来连接它们。在下面的示例中,字符串、元祖或列表都可以通过证书索引进行访问

它为我们展示了python内置类型的多态

B是一种特殊的A才会用继承

3、多态

Python是一种多态语言,程序员不用考虑多态

4、接口

一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法。

作用:限制继承接口的类的方法的名称及调用方式;隐藏了类的内部实现。

接口就是一种抽象的基类(父类),限制继承它的类必须实现接口中定义的某些方法

1、用接口专业代码

from abc import abstractmethod, ABCMeta#抽象
class Payment(metaclass=ABCMeta):@abstractmethoddef pay(self, money):raise NotImplementedError#底层
class Alipay(Payment):def pay(self, money):print("支付宝支付%s元"%money)class ApplePay(Payment):def pay(self, money):print("苹果支付%s元"%money)class WechatPay(Payment):def pay(self, money):print("微信支付%s元"%money)

#高层payment = Alipaypayment.pay(100)

2、新人代码

class WeiXinZhiFu:def huaqian(self, money):print("微信支付%s元"%money)class WangYinzhiFu:def huaqian(self, money):print("网银支付%s元"%money)

5、组合

它是一种将对象或类组合成更复杂的数据结构或软件实现的方法

在组合中,一个对象可用于条用其他模块中的成员函数,这样一来,无序通过集成就可以实现基本功能的跨模块作用

四、设计模式6大原则

1、开闭原则

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展

白话:加功能可以很方便的加,改代码尽量不要改?

python中的装饰器就用的是开闭原则

2、里氏(Liskov)替换原则

所有引用基类(父类)的地方必须能透明地使用其子类的对象。

传父类ok,之类也应该不会报错有问题,也就是之类不能覆盖父类

尤其在“替换父类代码的时候”

3、依赖倒置原则

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程

高层和底层不直接依赖,高层依赖底层 底层和高层不是一个人写的,底层修改,高层也要修改,抽象就是接口编程

1、用接口专业代码

from abc import abstractmethod, ABCMeta#抽象接口
class Payment(metaclass=ABCMeta):@abstractmethoddef pay(self, money):raise NotImplementedError#底层
class Alipay(Payment):def pay(self, money): #其他随便改,这一行不能动print("支付宝支付%s元"%money)class ApplePay(Payment):def pay(self, money):print("苹果支付%s元"%money)class WechatPay(Payment):def pay(self, money):print("微信支付%s元"%money)

返回的参数

2、新人代码

class WeiXinZhiFu:def huaqian(self, money):print("微信支付%s元"%money)class WangYinzhiFu:def huaqian(self, money):print("网银支付%s元"%money)

4、接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

就是不要乱继承:只有B是一种特殊的A才会用继承

5、迪米特法则

一个软件实体应当尽可能少地与其他实体发生相互作用

解偶

6、单一职责原则

不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

一个类只干一样的活

7、合成复用原则

1、类适配器 用的是继承

class WeChatPay(Payment, WeiXinZhiFu):def pay(self, money):self.huaqian(money)

2、对象适配器------用的是组合

class PayAdapter(Payment):def __init__(self, payment):self.payment = paymentdef pay(self, money):if hasattr(self, "pay"):return self.payment.pay(money)else:return self.payment.huaqian(money)

转载于:https://www.cnblogs.com/luoahong/p/9732898.html

设计模式:讲在设计模式之前相关推荐

  1. 描述最常用的5种http方法的用途_对不起,来晚了,这可能是设计模式讲的最通俗易懂的文章(收藏)

    ​御姐力作,深入浅出,妙趣横生,值得一看! ## 引言 你好,欢迎来到设计模式的世界,这一篇我将用一种引导.启迪的思路去讲述设计模式.在程序员的世界里,设计模式就相当于武侠世界的剑招.套路.掌握了招式 ...

  2. Java设计模式1:设计模式概论

    设计模式是什么 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.毫无 ...

  3. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  4. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  5. Python、设计原则和设计模式-创建类设计模式

    Python.设计原则和设计模式 前言 程序的目标:高内聚 低耦合 有哪些设计原则 设计原则是「高内聚.低耦合」的具体落地. 单一职责原则要求在软件系统开发.设计中,一个类只负责一个功能领域的相关职责 ...

  6. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  7. 23种设计模式——结构型设计模式(7种)

    目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...

  8. 设计模式学习1:设计模式简述和设计模式原则

    设计模式简述 什么是设计模式? 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式的目的: 代码高可用(相同作用的代码能重复 ...

  9. java api中的设计模式_Java API 设计模式之策略(Strategy)

    策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...

最新文章

  1. 20亿参数,大型视觉Transformer来了,刷新ImageNet Top1
  2. StrutsPreparedAndExcuteFilter与Interceptor
  3. 将数组按指定大小分组
  4. mysql的Table is readonly解决方案
  5. (转)Unity3DUnity3D在android下调试
  6. vpx8运行待解决问题
  7. Zongsoft.Data 发布公告
  8. freemaker中小数展示为整数的问题
  9. java consul服务发现_分布式项目(七)consul 服务注册与发现
  10. 13.罗马数字转整数-LeetCode
  11. Sqlserver 索引
  12. android重新打开应用程序,关于安卓应用后台运行后,重新进入,应用重新打开问题...
  13. Git提交代码相关命令
  14. java 汉字乱码_Java中文乱码问题
  15. Java中常见的服务器
  16. Rust学习:13.1_返回值和错误处理之panic 深入剖析
  17. 试题 基础练习 特殊回文数(123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。)
  18. 1.3_VMare 16 虚拟机安装配置 CentOS-7-x86_64-DVD-2009+GUI+原生 Java 1.8+ibus+VMware Tools
  19. html 图片不能选中状态,css图片不让选中状态如何实现
  20. 你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展

热门文章

  1. BASIC-6 杨辉三角形
  2. 【Qt】仿360安全卫士界面(自定义阴影边框类)
  3. 【Qt】Qt中QJsonValue类
  4. 【OpenSSL】OpenSSL之MD5
  5. 【Linux】一步一步学Linux——ncat命令(159)
  6. 【Tools】Linux远程连接工具(PuTTY)
  7. java 写文件 0x0d_Java 读写文件 - My and My Princess…… - OSCHINA - 中文开源技术交流社区...
  8. 微信小程序接入腾讯地图sdk地图 用户自选位置。踩坑+代码实现
  9. linux 路由指向策略,Linux 路由 学习笔记 之六 策略规则的添加
  10. 记录x86调试命令总结