Skip to main content
1、设计模式的六大原则

1、设计模式的六大原则

一、设计模式的六大原则

  • 单一职责原则

    • 单一职责原则的定义描述非常简单,也不难理解。

    一个类只负责完成一个职责或者功能。也就是说在类的设计中 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。

    比如 我们设计一个类里面既包含了用户的一些操作,又包含了支付的一些操作,那这个类的职责就不够单一,应该将该类进行
    拆分,拆分成多个功能更加单一的,粒度更细的类.

  • 开放封闭原则

    • 定义:对扩展开放,对修改关闭

    对扩展开放和对修改关闭表示当一个类或一个方法有新需求或者需求发生改变时应该采用扩展的方式而不应该采用修改原有
    逻辑的方式来实现。因为扩展了新的逻辑如果有问题只会影响新的业务,不会影响老业务;而如果采用修改的方式,很有可
    能就会影响到老业务受影响。

    优点:

    1. 新老逻辑解耦,需求发生改变不会影响老业务的逻辑
    2. 改动成本最小,只需要追加新逻辑,不需要改的老逻辑
    3. 提供代码的稳定性和可扩展性
  • 里氏替换原则

    1 ) 什么是替换 ?

    替换的前提是面向对象语言所支持的多态特性,同一个行为具有多个不同表现形式或形态的能力。

    以 JDK 的集合框架为例,List接口的定义为有序集合,List接口有多个派生类,比如
    大家耳熟能详的 ArrayList, LinkedList。那当某个方法参数或变量是 List接口类型时,
    既可以是 ArrayList的实现, 也可以是 LinkedList的实现,这就是替换。

    2 ) 什么是与期望行为一致的替换?

    在不了解派生类的情况下,仅通过接口或基类的方法,即可清楚的知道方法的行为,而不管哪种派
    生类的实现,都与接口或基类方法的期望行为一致。

    不需要关心是哪个类对接口进行了实现,因为不管底层如何实现,最终的结果都会符合接口中关于方法的描述(也就是与接口中方法的期望行为一致).

    或者说接口或基类的方法是一种契约,使用方按照这个契约来使用,派生类也按照这个契约来实现。这就是与期望行为一致的替换。

  • 接口隔离原则

    定义:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

    接口隔离原则与单一职责原则的区别

    接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

    • 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。
    • 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建
  • 依赖倒置原则

    定义:依赖倒置原则(Dependence Inversion Principle,DIP)是指在设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

    依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。

    依赖倒置原则的好处:

    • 减少类间的耦合性,提高系统的稳定性 . (根据类与类之间的耦合度从弱到强排列:依赖关系、关联关系、
      聚合关系、组合关系、泛化关系和实现关系 )
    • 降低并行开发引起的风险 (两个类之间有依赖关系,只要制定出两者之间的接口(或抽象类)就可以独立开发了)
    • 提高代码的可读性和可维护性
  • 迪米特法则

    简单来说迪米特法则想要表达的思想就是: 不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。

    如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。


Y-aong...About 10 minpython设计模式
2、策略模式

2、策略模式

一、定义

策略模式(Strategy Pattern)是行为设计模式的一种,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。在Python中实现策略模式通常涉及创建一个接口或基类,以及多个实现了该接口或继承自该基类的具体策略类。

二、策略模式结构

  1. 上下文 (Context) 维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。
  2. 策略 (Strategy) 接口是所有具体策略的通用接口, 它声明了一个上下文用于执行策略的方法。
  3. 具体策略 (Concrete Strategies) 实现了上下文所用算法的各种不同变体。

Y-aong...About 4 minpython策略模式设计模式
3、单例模式

3、单例模式

一、定义

单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。当时我在学习这个模式时老师讲到一个经典的例子就是购物车,每个人可能会有多个商品但是只可以有一个购物车。

二、实现方式

在Python中实现单例模式有多种方法,每种方法都有其特点和适用场景。

1、使用模块

Python 的模块本身就是天然的单例模式。当第一次导入模块时,Python 解释器会执行模块中的代码并将其加载到内存中;之后再次导入该模块时,解释器只会返回已经加载好的模块对象,而不会重新执行模块代码


Y-aong...About 2 minpython单例模式设计模式
4、工厂模式

4、工厂模式

一、模式定义

工厂模式(Factory Pattern)是软件工程中一种创建型设计模式,它提供了一种创建对象的最佳方式,通过定义一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂模式使得一个类的实例化延迟到其子类进行。在Python中,工厂模式可以通过多种方式实现,包括简单工厂模式、工厂方法模式和抽象工厂模式。

二、实现方式

1、简单工厂模式

简单工厂模式是最基础的形式,它使用单一的工厂类来封装对象创建的过程,并根据输入参数返回不同类型的对象。这种方式的优点在于易于理解和实现,但它有一个明显的缺点:当需要添加新产品时,必须修改工厂类以支持新的产品类型,这违反了面向对象设计中的开闭原则(Open/Closed Principle)。例如:


Y-aong...About 3 minpython工厂模式设计模式
5、适配器模式

5、适配器模式

一、定义

适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。它通过引入一个中间件——适配器,将一个类的接口转换成客户期望的另一个接口,从而使原本因接口不兼容而不能一起工作的类能够协同工作。适配器模式的核心思想在于创建一个新的类或对象,作为现有类和目标接口之间的桥梁,使得它们可以相互协作。

在python的pandas是大名鼎鼎的数据处理模块,提供了强大的数据结构如 SeriesDataFrame,同时支持excel,csv等数据格式的相互转换,明确地以“适配器模式”的名义实现其功能,然而,在某些方面,Pandas确实体现了适配器模式的核心思想——即通过某种机制使不同的接口或数据源能够协同工作。


Y-aong...About 3 minpython适配器模式设计模式
6、责任链模式

6、责任链模式

一、定义

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。这种模式特别适用于那些需要通过多个步骤来处理请求的情况,并且这些步骤可以动态地添加、移除或重新排序。

在某些系统中,可能存在一系列连续的检查或者处理步骤,例如在线订购系统的权限验证、数据清理、IP地址过滤以及缓存检查等。随着新功能的不断加入,代码可能会变得越来越复杂和难以维护。责任链模式提供了一种解决方案,它可以将这些处理步骤抽象为独立的对象,并将它们连接成一条链,从而简化了代码结构并提高了其可读性和可维护性。


Y-aong...About 4 minpython责任链模式设计模式