iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >软件开发基础之设计模式概述
  • 959
分享到

软件开发基础之设计模式概述

2024-04-02 19:04:59 959人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

成为一名优秀的软件开发工程师,设计模式的重要性不言而喻,本章节是对设计模式的前置知识概述,涉及概念性较大,读者可在设计模式学习过程中参阅本文档。 在第一章节,主要介绍软件设计的七大原

成为一名优秀的软件开发工程师,设计模式的重要性不言而喻,本章节是对设计模式的前置知识概述,涉及概念性较大,读者可在设计模式学习过程中参阅本文档。

在第一章节,主要介绍软件设计的七大原则,接着在第二章我们简要介绍设计模式的三种分类,让我们站在一定的高度对设计模式有整体的把握,第三章UML类图帮助我们更好的看懂设计模式的代码。

一、软件设计七大原则

无论是在我们学习设计模式的过程中,还是日常的开发过程中,都要遵循一套统一的软件设计原则。

在常见的设计原则中,一共是7 种设计原则,它们分别为开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则和合成复用原则。

各种各样的原则最终目的只有一句话,也是软件开发人员听过的最多的一句话:高内聚、低耦合,提高复用性、可扩展性、可维护性。

设计原则一句话归纳目的
开闭原则对扩展开放,对修改关闭降低维护带来的新风险
依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展
单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性
接口隔离原则一个接口只干一件事,接口要精简单一功能解耦,高聚合、低耦合
迪米特法则不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度只和朋友交流,不和陌生人说话,减少代码臃肿
里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义防止继承泛滥
合成复用原则尽量使用组合或者聚合关系实现代码复用,少使用继承降低代码耦合

这些原则在我们开发过程中或多或少的都有体现,比如在我们的项目中业务层总是定义Service接口,在Impl中实现具体的逻辑,很多开发只是照葫芦画瓢,却并不知道为什么要这样做,结合开发原则读者可以仔细想一下为什么要这样做。

还有一个典型的用法,我们定义的实体类的成员变量,总是用private修饰,然后定义get和set方法去操作这些成员变量,那为什么不直接把成员变量定义public,直接操作成员变量呢。

软件设计原则在我们的开发中处处体现,在一些代码习惯上多思考,做到知其然知其所以然。

二、设计模式分类

在设计模式学习过程中可以查阅该文档,学习每个设计模式时,对于他的作用和分类能做到心中有数。

1、创建型

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。

  • 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
  • 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。
  • 工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。
  • 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
  • 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

2、结构型

结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。

  • 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
  • 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
  • 桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。
  • 装饰(Decorator)模式:动态地给对象增加一些职责,即增加其额外的功能。
  • 外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
  • 享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。
  • 组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

3、行为型

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。

行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。

  • 模板方法(Template Method)模式:定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
  • 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
  • 命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
  • 职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
  • 状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。
  • 观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。
  • 中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。
  • 迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
  • 访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。
  • 备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。
  • 解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。

三、UML详解

UML类图摘抄自大话设计模式,我目前见过最好的一张图,便于读者理解。

面向对象的世界中,包含了对象和接口,UML类图主要是能表达出来对象和接口的表现和他们的关系。

对象和接口都是采用矩形框表示,因为对象包含类名、成员变量、成员方法所以用三层来表示,接口没有成员变量,所以采用两层来表示,为了更易于区分在接口名上《interface》,另外,抽象类用斜体表示。成员变量均有关键词修饰,+代表public、-代表private、#代表protected

接下来说明类与类、接口与类之间关系的表达。

继承,空心三角形+实线

实现接口,空心三角形+虚线

关联,实线。企鹅和气候。

聚合,菱形+实现箭头。雁群和大雁。

依赖,虚线箭头。动物依赖水和氧气才能生存。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: 软件开发基础之设计模式概述

本文链接: https://www.lsjlt.com/news/168355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 软件开发基础之设计模式概述
    成为一名优秀的软件开发工程师,设计模式的重要性不言而喻,本章节是对设计模式的前置知识概述,涉及概念性较大,读者可在设计模式学习过程中参阅本文档。 在第一章节,主要介绍软件设计的七大原...
    99+
    2024-04-02
  • Java基础之文件概述
    目录一、基本概念和常识1.1 二进制思维1.2 文件类型1.3 文本文件的编码1.4 文件系统1.5 文件读写二、Java文件概述2.1 流2.2 装饰器设计模式 2.3 ...
    99+
    2024-04-02
  • 软件工程(十三) 设计模式之结构型设计模式(一)
    前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。 1、适配器模式(Adapter) 简要说明 将一个类的接口转换为用户希望得到的另一个接口。它使原本不相同的接口得以协同工...
    99+
    2023-08-30
    软件工程 设计模式 java
  • Go语言基础设计模式之策略模式示例详解
    目录概述针对同一类型问题的多种处理方式一、不使用策略模式二、策略模式UML 总结示例 概述 定义一系列算法,将每个算法封装起来。并让它们能够相互替换。策略模式让算法独立于使用它的客户...
    99+
    2024-04-02
  • DeepModule深模块之软件设计
    目录正文1,模块化设计2,接口里有什么3,抽象4,深模块5,浅模块6,Classitis7,例子8,结论正文 类是不是越小越好?最近在读John Ousterhout的《A Phil...
    99+
    2024-04-02
  • 软件工程(十四) 设计模式之结构型模式(二)
    1、组合模式 简要说明 将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 速记关键字 树形目录结构 类图如下 由类图其实可以看出,组合模式就是将具有父子关系的结构,组装形成一棵树,并且根据...
    99+
    2023-08-30
    软件工程 设计模式
  • JAVA设计模式零基础解析之单例模式的八种方式
    目录单例模式简介:单例模式优点:应用场景:单例设计模式的八种方式:1、饿汉式(静态常量)2、饿汉式(静态代码块)3、懒汉式(线程不安全)4、懒汉式(线程安全,同步方法)5、懒汉式(线...
    99+
    2024-04-02
  • Unity游戏开发中的设计模式之策略模式
    目录一、使用策略模式的原因二、策略模式的定义三、策略模式的使用说明四、策略模式的实现范例五、中介者模式的优点和注意事项六、策略模式的总结一、使用策略模式的原因 在设计游戏角色伤害时,...
    99+
    2023-05-19
    Unity策略模式 Unity设计模式
  • Javascript设计模式之发布订阅模式
    目录简介回忆曾经畅谈现在发布-订阅的顺序探讨JavaScript实现发布-订阅模式的便利性小结简介 发布-订阅模式又叫做观察者模式,他定义了一种一对多的依赖关系,即当一个对象的状态发...
    99+
    2022-12-19
    JS发布订阅模式 JS设计模式订阅模式
  • Java设计模式的基本概念和分类
    这篇文章主要介绍“Java设计模式的基本概念和分类”,在日常操作中,相信很多人在Java设计模式的基本概念和分类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java设计模式的基本概念和分类”的疑惑有所帮助!...
    99+
    2023-06-16
  • java设计模式基础知识有哪些
    本篇内容介绍了“java设计模式基础知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1、单例模式  单例模式:分为饿汉式和懒汉式...
    99+
    2023-06-02
  • Go语言基础模板设计模式示例详解
    目录概述模板模式生活案例策略模式涉及到两个角色UML 总结示例概述 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重...
    99+
    2024-04-02
  • Unity游戏开发中必备的设计模式之外观模式详解
    目录一、外观模式定义二、外观模式说明三、实现游戏主程序1、游戏主架构设计2、实现说明3、使用外观模式的优点四、结论一、外观模式定义 外观模式(Facade)在GoF中的解释:为子系统...
    99+
    2023-05-19
    Unity设计模式之外观模式 Unity外观模式
  • Java设计模式之单件模式深入讲解
    目录定义Java单件模式经典单件模式的实现多线程单件模式的实现急切创建实例双重检查加锁Python单件模式模块实现new关键字实现装饰器实现函数装饰器类装饰器定义 单件模式确保一个类...
    99+
    2024-04-02
  • 每天一个设计模式之订阅-发布模式
    博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 0. 项目地址 ...
    99+
    2023-01-31
    模式
  • 字体设计开发软件FontLab 7 for Mac
    FontLab 7 for Mac是一个全能的字体编辑器,FontLab 7 Mac专为平面设计师,印刷和字体铸造厂所设计的专业字体设计及开发。同时FontLab 7 Mac版也支持数据交换与其他字体创建工具,让您快速的进行字体修改和绘制。...
    99+
    2023-06-05
  • JS前端设计模式之发布订阅模式详解
    目录引言例子1:version1:version2:总结引言 昨天我发布了一篇关于策略模式和代理模式的文章,收到的反响还不错,于是今天我们继续来学习前端中常用的设计模式之一:发布-订...
    99+
    2022-11-13
    JS发布订阅模式 JS前端设计模式
  • Deep Module深模块之软件设计实例分析
    今天小编给大家分享一下Deep Module深模块之软件设计实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-07-02
  • Java设计模式之开闭原则精解
    目录1.什么是开闭原则?2.违反Ocp代码案例3.遵守Ocp代码案例1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则。一个...
    99+
    2024-04-02
  • PHP设计模式:用于解决特定软件问题的模式
    php 设计模式提供了已知解决方案来应对软件开发中常见的问题。常见的模式类型包括创建型(例如工厂方法模式)、结构型(例如装饰器模式)和行为型(例如观察者模式)。设计模式在解决重复性问题、...
    99+
    2024-05-13
    php 设计模式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作