软件设计模式概述

一        软件模式概述

软件设计模式是在软件开发过程中经过验证的、可重复使用的最佳实践。

它们提供了解决常见设计问题的模板和指导方针,有助于开发人员编写高质量、可维护和可扩展的代码。

软件设计模式通常基于面向对象的编程范式,并利用封装、继承和多态等特性来实现设计目标。

它们提供了一种高级的抽象层次,使开发人员可以关注问题的本质,而不是低级的实现细节。

1.1        设计模式设计原则

设计模式的基本原则包括以下几个:

  • 1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因。即一个类应该有且只有一个职责,避免类承担过多的职责,提高代码的可维护性和可扩展性。
  • 2. 开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该是可扩展的,但是不可修改的。即对于新增功能应通过扩展已有的代码来实现,而不是修改已有的代码。
  • 3. 里氏替换原则(Liskov Substitution Principle,LSP):子类型必须能够完全替换掉它们的基类型。即子类必须能够在不影响程序正确性的前提下替换掉父类。
  • 4. 依赖倒置原则(Dependency Inversion Principle,DIP):依赖于抽象而不是具体。高层模块不应该依赖于底层模块,它们都应该依赖于抽象。
  • 5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
  • 6. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解。一个对象应该只与它的直接朋友通信,而避免和非直接朋友通信。

二         软件模式分类

常见的软件设计模式包括:

2.1         创建型模式

2.1.1        概述

用于创建对象

2.1.2        种类

单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式

2.1.2.1        单例模式

单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。

单例模式的实现方式有多种,其中比较常见的有以下三种:

  1. 饿汉式:在类加载时就创建实例,并通过静态方法返回该实例。这种方式简单直接,但是无法实现延迟加载。如果该实例在整个程序运行周期中都不会被使用,则会造成资源的浪费。

  2. 懒汉式:在第一次使用时创建实例,并通过静态方法返回该实例。这种方式实现了延迟加载,但是在多线程环境下需要考虑线程安全问题。

  3. 双重锁检查:在懒汉式的基础上加入了双重锁检查,以解决多线程环境下的线程安全问题。它通过使用 synchronized 关键字来保证只有一个线程能够进入临界区创建实例。

2.1.2.2        工厂模式

工厂模式是设计模式中的一种,它提供了一种创建对象的方式,将对象的创建逻辑与使用逻辑分离,从而降低耦合性。

工厂模式的核心思想是定义一个接口或抽象类作为工厂类的工厂方法,具体的对象的创建交给具体的工厂类来实现。

工厂类根据客户端的需求,创建相应的对象并返回。

工厂模式的实现方式有多种,其中常见的有以下几种:

  1. 简单工厂模式:通过一个工厂类来创建对象,客户端只需要告诉工厂类所需的产品类型即可。工厂类根据客户端的需求,创建相应的产品对象并返回。

  2. 工厂方法模式:将对象的创建交给具体的工厂类来实现,每个具体的工厂类只负责创建一个具体的产品对象。客户端通过调用具体的工厂类来获取所需的产品对象。

  3. 抽象工厂模式:通过定义一组相关的工厂类来创建对象,每个工厂类负责创建一组产品对象。客户端通过调用抽象工厂类来获取所需的产品对象。

优点:将对象的创建和使用分离,降低了耦合性;可以通过扩展工厂类来创建更多的产品对象;对客户端隐藏了具体的实现细节。

缺点:如增加了系统的复杂度、需要额外的工厂类等。

2.1.2.3       建造者模式

建造者模式将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的核心思想是通过一个指导者(Director)和多个具体建造者(Builder)来创建复杂对象。

指导者负责指导建造过程,而具体建造者负责实际的构建工作。客户端只需要告诉指导者所需的产品类型,由指导者来协调和调用具体建造者完成构建。

建造者模式的主要角色有:

1. 产品(Product):要创建的复杂对象。

2. 抽象建造者(Builder):规定了产品的构建过程,包括创建和装配各个组成部分的方法。

3. 具体建造者(Concrete Builder):实现抽象建造者接口,负责具体产品的构建和装配。

4. 指导者(Director):负责指导建造过程,根据客户端的需求调用具体建造者的方法来构建产品。

优点:将复杂对象的构建过程与其表示分离,使得构建过程可以独立地变化;可以更加精细地控制对象的构建过程;可以通过一步一步地构建来创建不同的表示。

缺点:如增加了系统的复杂度、需要额外的建造者类等。

2.1.2.4        原型模式

2. 2        结构型模式

2.2.1        概述

用于描述如何将类和对象组合成更大的结构。

2.2.2         种类

适配器模式、代理模式、桥接模式、装饰器模式、外观模式、享元模式和组合模式。

2.2.2.1        适配器模式
2.2.2.2        代理模式
2.2.2.3        桥接模式
2.2.2.4        装饰器模式
2.2.2.5        外观模式
2.2.2.6        享元模式
2.2.2.7        组合模式

2.3         行为型模式

2.3.1        概述

用于描述对象之间的通信和协作关系。

2.3.2        种类

观察者模式、策略模式、模板方法模式、迭代器模式、命令模式、备忘录模式、状态模式、访问者模式和解释器模式。

2.3.2.1        观察者模式
2.3.2.2        策略模式
2.3.2.3        模板方法模式
2.3.2.4        迭代器模式
2.3.2.5        命令模式
2.3.2.6        备忘录模式
2.3.2.7        状态模式
2.3.2.8        访问者模式
2.3.2.9        解释器模式

三        设计模式优缺点

3.1        优点

使用设计模式可以使代码更具可读性和可维护性,同时也可以提高代码的复用性和可扩展性。

3.2        缺点

过度使用设计模式也可能导致代码变得过于复杂,因此在选择和实施设计模式时需要谨慎考虑。

相关推荐

  1. 软件设计模式概述

    2024-06-06 22:22:04       10 阅读
  2. 软件设计模式概述

    2024-06-06 22:22:04       6 阅读
  3. 设计模式概述

    2024-06-06 22:22:04       32 阅读
  4. 设计模式概述

    2024-06-06 22:22:04       30 阅读
  5. 设计模式概述

    2024-06-06 22:22:04       16 阅读
  6. 设计模式-概述

    2024-06-06 22:22:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 22:22:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 22:22:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 22:22:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 22:22:04       18 阅读

热门阅读

  1. JVM基础

    JVM基础

    2024-06-06 22:22:04      7 阅读
  2. 前端 实现有时间限制的缓存

    2024-06-06 22:22:04       10 阅读
  3. 深度学习之动量momentum介绍

    2024-06-06 22:22:04       8 阅读
  4. 力扣每日一题 6/6

    2024-06-06 22:22:04       11 阅读
  5. Springboot+WebSocket实现消息推送

    2024-06-06 22:22:04       10 阅读