![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
23 种设计模式中常用模式
ZhengXinTang
习重要! 学而实习之, 才叫学习!
只学而不习, 不实践, 这叫本末倒置, 丢了大头顾小头;
因缘际会,所有巧合即为 和合事物;
当一个人悄悄的在反省时,努力时,改过时, 命运的齿轮便被他转动了。
展开
-
Part III: 4_模板方法模式
定义: 模板方法内容: 定义一个操作中的算法的骨架, 而将一些步骤 延迟到 子类中;模板方法使得子类不改变一个算法的结构即 可 重定义该算法的 某些特定步骤;角色抽象类: 定义抽象的原子操作(钩子操作); 实现一个模板方法 作为 算法的 骨架;具体类: 实现 原子操作;使用场景一次性实现一个算法的不变的 部分;各个子类中的 公共行为 应该被提取出来, 并集中到一个公共 父类中 以避免代码重复控制子类扩展;代码实例底层代码from abc import AB原创 2022-01-25 18:13:41 · 169 阅读 · 0 评论 -
PartIII : 3_策略模式
定义: 策略模式内容: 定义一系列的 算法, 把他们一个个 封装 起来, 并且使他们可互相替换。 本模式使得算法可 独立于 使用它的 客户而变化。角色:抽象策略具体策略上下文;优点:1.定义了一系列 可重用的算法和 行为;2. 消除了 一些 条件语句;3. 可以 提供相同 行为的 不同实现;缺点: 客户必须了解不同的策略;代码实例底层代码:from abc import ABCMeta, abstractmethodclass Strategy(metaclass=原创 2022-01-25 18:08:31 · 49 阅读 · 0 评论 -
PartIII:2_observer 观察者模式
定义: 观察者模式内容:定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新, 观察者模式又称 “ 发布-订阅 ” 模式;角色:抽象主题;具体主题 ; 发布者;抽象观察者;具体观察者 concrete observer 订阅者;@property: 属性装饰器;负责 读取 函数中的 私有成员属性;@company_info.setter; 对 私有属性 的 写;使用场景1.当一个抽象模型有两方面, 其中原创 2022-01-25 18:01:54 · 117 阅读 · 0 评论 -
Part III: 1_ 责任链模式
定义: 责任链模式内容: 使多个对象有机会处理请求, 从而 避免请求的发送者和接受者之间的耦合关系;将这些对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止;角色:抽象处理者( handler)具体处理者客户端;适用场景:1. 有多个对象可以处理 一个请求, 哪个 对象处理由运行时决定;2. 在不明确接受者的情况下, 向多个对象中的一个提交一个请求优点:降低耦合度: 一个对象无需知道 是其他哪一个对象处理其请求;代码实例底层代码from abc imp原创 2022-01-25 17:06:34 · 278 阅读 · 0 评论 -
PartII - 5_代理模式
定义: 代理模式内容: 为其他对象提供一种代理以控制对 这个对象的访问;应用场景:远程代理: 为远程的对象提供代理;虚代理: 根据需要创建很大的对象;保护代理: 控制对原始对象的访问, 用于对象有不同访问权限时;抽象实体: 实体 ; 代理优点:远程代理: 可以隐藏对象位于 远程地址空间的事实;虚代理: 可以进行优化, 根据 要求创建 对象;保护代理: 允许在访问一个对象时, 有一些 附加的 内务处理;代码实例底层代码from abc import AB原创 2022-01-25 16:50:51 · 134 阅读 · 0 评论 -
Part II : 4_外观模式
定义: 外观模式内容: 为子系统中的 一组接口提供一个一致的界面, 外观模式定义了一个 高层接口,这个接口使得这一子系统更加容易使用;角色 外观 facade; 子系统类; subsystem classes ;优点:减少系统相互依赖;提高了灵活性;提高安全型;代码实例底层代码:class CPU: def run(self): print(" cpu start running ") def stop(self):原创 2022-01-25 16:44:04 · 64 阅读 · 0 评论 -
Part II : 结构型模式 3_组合模式
定义: 组合模式内容: 将 对象组合成 树型结构 以表示“ 部分-整体” 的 层次结构。组合模式 使得 用户对 单个对象 和组合对象的 使用具有 一致性;角色:抽象组件;叶子组件;复合组件;客户端;使用场景:1.表示对象的“ 部分-整体” 层次结构(特别是结构是 递归的)2.希望用户忽略 组合对象 与 单个对象的 不同, 用户 统一的使用 组合结构中的所有对象;代码底层代码from abc import ABCMeta, abstractmethod# 抽象组件原创 2022-01-22 09:28:33 · 133 阅读 · 0 评论 -
PartII: 结构型模式 2_桥模式
文章目录类与类之间的复用定义: 桥模式一、pandas是什么?二、 代码实例1. 底层代码2.高层代码总结类与类之间的复用一个类复用另一个 类的代码的方式有:继承; 实现类适配器; 紧耦合;组合: 实现对象适配器; 松耦合;在一个类中,实例化另一个类;实例化另一个类, 从而调用该实例化后对象中的 方法定义: 桥模式 桥模式内容: 将一个事物的两个维度分离, 使其都可以独立的变化。角色:抽象; 细化抽象;实现者;具体实现者 ; concrete Implem原创 2022-01-21 09:35:21 · 484 阅读 · 0 评论 -
PartII 结构型模式 1. 适配器模式
文章目录定义: 适配器模式一、使用场景;二、代码1.底层代码2. 高层代码调用总结定义: 适配器模式内容: 将一个类的接口 转换成 用户期望的 另一种接口。适配模式 使得 原本由于接口不兼容而不能在一起工作的那些类 可以一起工作;实现方式:类适配器: 使用多继承;对象适配器: 使用组合;角色:目标接口待适配的类;适配器一、使用场景;1.使用一个已经存在的类, 但该类的接口不符合现有的 使用需求;2.当想使用一些已经存在的子类, 但不可能对 每一个都进行子类化以匹配他原创 2022-01-21 09:26:22 · 175 阅读 · 0 评论 -
创建型模式 4_ 单例模式
文章目录创建模式小结:定义: 单例模式一、__new__(cls, *args, **kwargs) 方法特性二、使用步骤1.高层代码2.高层代码总结创建模式小结:创建型模式小结: 抽象工厂, 建造者模式 相比于 简单工厂模式 和 工厂方法 模式 更加灵活,也更加复杂;实践中: 先从 设计 简单工厂模式开始, 或工厂方法模式开始;当自己已经熟练掌握 这种方法时, 并且 当设计需要更大的灵活性时, 开始向后续的设计模式演化;定义: 单例模式 内容: 保证一个类 只有一个实例,原创 2022-01-20 17:58:29 · 249 阅读 · 0 评论 -
创建型模式 3_建造者模式
文章目录定义 : 建造者模式一、特点:二、code1. 底层代码2. 高层代码总结定义 : 建造者模式提示:这里可以添加本文要记录的大概内容:。一、特点:特点: 建造者模式 与抽象工厂模式相似, 用来创建复杂对象, 主要区别是建造者模式 一步步 有序 的构造一个复杂对象, 而 抽象工厂模式 着重于 多个系列的产品对象;二、code1. 底层代码代码如下:from abc import ABCMeta, abstractmethodclass Player: d原创 2022-01-20 17:42:44 · 182 阅读 · 0 评论 -
创建型模式 2_抽象工厂模式
文章目录定义:抽象工厂模式代码1.底层代码2.高层代码总结定义:抽象工厂模式内容: 定义一个工厂类接口, 让工厂子类来创建一系列 相关 或相互依赖的对象。举例: 生产一部手机, 需要手机壳, CPU, 操作系统 三类对象 进行组装, 其中每类对象都有不同的种类; 对每个具体工厂, 分别生产一部手机所需要的 三个 对象。相比工厂方法 模式, 抽象工厂模式中的每个具体工厂 都生产 一套产品;代码1.底层代码from abc import abstractmethod, ABCMeta原创 2022-01-20 17:32:02 · 171 阅读 · 0 评论 -
创建型模式- 1_工厂方法模式
文章目录系列文章目录工厂方法模式1.底层代码2. 高层代码总结系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档工厂方法模式提示:这里可以添加本文要记录的大概内容: 定义一个用于创建对象的接口(工厂接口), 让子类决定实例化哪一个产品类;角色:抽象工厂角色; 抽象类; 具体工厂角色: 具体类;抽象产品: 接口(抽象方法); 具原创 2022-01-20 17:10:32 · 269 阅读 · 0 评论 -
创建型设计模式 - 0_简单工厂模式
文章目录系列文章目录前言二、举例1.底层代码2.客户端代码总结系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档前言内容: 不直接向客户端 (高层代码,指调用底层代码的用户)暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例;角色:工厂角色(creator)抽象产品角色(product): 是指抽象的 接口 类; 作用原创 2022-01-20 16:53:49 · 590 阅读 · 0 评论 -
设计模式简介
接口的定义;接口: 若干抽象方法的集合。作用:1- 限制实现接口的 类, 必须按照接口 给定的 调用方式 实现这些方法;2- 对高层模块隐藏了类的内部实现;统一 所有调用某一方法的 方式, 即统一调用该方法时的所需要的形参;定义一个类A, 该类实现功能是,给出一个方法的名称;但具体的内容, 留给继承他的类去实现;所有继承类A 的 其他类,必须实现类A 中 的对应的那个方法;或者 在Python 中, 使用抽象方法;定义一个抽象类, 该类中有抽象方法 @abstractmeth原创 2022-01-20 16:32:49 · 157 阅读 · 0 评论 -
面向对象设计的五个基本原则
系列文章目录:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用文章目录系列文章目录前言前言提示:这里可以添加本文要记录的大概内容:1.开放封闭原则: 一个软件实体 如类, 模块和函数 应该对扩展开放, 对修改关闭; 即软件实体应尽量在不修改原有代码的情况下 进行扩展;2.里氏替换原则:在所有引用 父类的地方, 必须能透明的使用 其 子类的对象;注: 即 某一个地方 调用父类时, 此时 这个地方 也应该同样能够原创 2022-01-20 16:25:52 · 853 阅读 · 0 评论