面向对象SOLID原则-设计模式-第2篇
面向对象设计的SOLID原则
1.开放封闭原则
一个软件实体 (类,函数,模块) 对扩展开放,对修改关闭。也就是 软件实体 应该尽量在不修改原有代码的情况下 进行扩展
举个例子,
装饰器的使用,就可以给某个函数增加新的功能,
类的继承,实现复用 父类的方法
2. 里氏替换原则
所有引用父类的地方必须能够 透明的使用子类对象
from abc import ABCMeta, abstractmethod
class User:
def show_name(self):
pass
class VIPUser(User):
def show_name(self):
pass
def show_user_name(u):
u.show_name()
if __name__ == '__main__':
u = User()
show_user_name(u)
上面的show_user_name方法 传入User对象没问题的话,传入子类的对象VIPUser()对象 也应当是ok的
3. 依赖倒置原则
高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象
换言之,需要针对接口编程,而不是针对实现编程
就拿上一篇中关于支付的例子来举例:
调用方(客户端,高层模块)调用接口(底层模块)的时候, 不需要care 具体如何实现支付这个方法的
也不care这个实现方法的效率 关注的只是这个支付方法的传入参数 以及 方法的返回值
这个支付的方法 就是抽象出来的接口,
而具体实现过程是依赖这个抽象接口 而生存的,
但是抽象的接口依赖具体的细节 包括你用别的语言实现 或者调用别的第三方实现 都无所谓
4. 接口隔离原则
使用多个换专门的接口,而不是使用单一的总接口,
也就是, 客户端不应该依赖那些它不需要的接口
举个例子:
class Animal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
pass
@abstractmethod
def fly(self):
pass
class Tiger(Animal):
def walk(self):
pass
def swim(self):
# 老虎不会游泳
pass
def fly(self):
# 老虎不会飞
pass
上面的例子中,Animal这个类定义了三个抽象方法,所有继承Animal类的子类 都必须 要实现walk swim fly三个方法 但是老虎只会跑 不会飞 也不会 游泳怎么办?????
接口隔离原则就派上用场了
from abc import ABCMeta, abstractmethod
class LandAnimal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
class WaterAnimal(metaclass=ABCMeta):
@abstractmethod
def swim(self):
pass
class SkyAnimal(metaclass=ABCMeta):
@abstractmethod
def fly(self):
pass
class Tiger(LandAnimal):
def walk(self):
pass
class Frog(LandAnimal, WaterAnimal):
def swim(self):
pass
def walk(self):
pass
class Swan(WaterAnimal, SkyAnimal):
def swim(self):
pass
def fly(self):
pass
将Animal这个类根据功能(方法 method)的不同进行拆分
5. 单一职责
不要存在多于一个导致类变更的原因
通俗的讲一个类只负责一项职责
面向对象SOLID原则-设计模式-第2篇的更多相关文章
- 面向对象SOLID原则的自我理解
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.面向对象设计的原则SRP The Single Res ...
- 浅谈 SOLID 原则的具体使用
SOLID 是面向对象设计5大重要原则的首字母缩写,当我们设计类和模块时,遵守 SOLID 原则可以让软件更加健壮和稳定.那么,什么是 SOLID 原则呢?本篇文章我将谈谈 SOLID 原则在软件开发 ...
- 面向对象的SOLID原则白话篇
面向对象的SOLID原则 简介 缩写 全称 中文 S The Single Responsibility Principle 单一责任原则 O The Open Closed Principle 开放 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- OOD 面向对象面试干货分享| 面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. 简写 全拼 中文翻译 SRP The Single Res ...
- 【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章<设计模式>,毕竟前面写了不少 "武功招式" 的 ...
- 【转】面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...
- 面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...
- 面向对象涉及SOLID原则
S = Single Responsibility Principle 单一职责原则 O = Opened Closed Principle 开放闭合原则 L = Liscov Substituti ...
- 设计模式学习(二):面向对象设计原则与UML类图
一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
随机推荐
- 使用vLLM和ChatGLM3-6b批量推理
当数据量大的时候,比如百万级别,使用 ChatGLM3-6b 推理的速度是很慢的.发现使用 vLLM 和 ChatGLM3-6b 批量推理极大的提高了推理效率.本文主要通过一个简单的例子进行实践. 1 ...
- 【分享】推荐一个非常好用的redis远程连接工具
推荐一个非常好用的redis远程连接工具 蓝奏云地址 https://wwsi.lanzoum.com/ig7xZ0xspf0h 密码:4vnz 二维码:
- 【1】从零玩转OSS阿里云存储服务之阿里云平台等操作-1-cong-ling-wan-zhuan-oss-a-li-yun-cun-chu-fu-wu-zhi-a-li-yun-ping-tai-deng-cao-zuo
title: [1]从零玩转OSS阿里云存储服务之阿里云平台等操作 date: 2021-06-09 17:21:12.037 updated: 2021-12-26 17:43:18.92 url: ...
- 【推荐】Helix 常用命令与设置
目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...
- JavaFx之使用高版本JDK(二十八)
JavaFx之使用高版本JDK(二十八) 如何使用高版本的jfx? 根据官网的需要手动引入jfx模块(运行参数:–module-path) 要知道高版本jfx已经集成了丰富的主流功能,例如视频编码,大 ...
- 文心一言 VS 讯飞星火 VS chatgpt (48)-- 算法导论6.1 6题
值为<23,17,14,6,13,10,1,5,7,12>的数组是一个最大堆吗? 文心一言: 是的,这个数组是一个最大堆. 最大堆是一种特殊的二叉树,它满足以下性质:对于任意节点 x,其子 ...
- 23、Flutter AppBar TabBar TabBarView
AppBar自定义顶部按钮图标.颜色 class MyHomePage extends StatelessWidget { const MyHomePage({super.key}); @overri ...
- 详解CCE服务:一站式告警配置和云原生日志视图
本文分享自华为云社区<新一代云原生可观测平台之CCE服务日志和告警篇>,作者:云容器大未来. 告警和日志是运维人员快速定位问题.恢复异常的主要手段.运维人员日常的工作模式往往是先接收告警信 ...
- 云图说|每个成功的业务系统都离不开APIG的保驾护航
摘要:华为云API网关(APIG)是为企业开发者及合作伙伴提供的高性能.高可用.高安全的API托管服务, 帮助企业轻松构建.管理和部署不同规模的API. 本文分享自华为云社区<[云图说]第243 ...
- 云小课|细数那些VMware虚拟机的恢复招式
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:当遭遇误操作.病毒 ...