当前位置: 首页 > news >正文

软件领域中面向对象的设计模式

前面写了面向对象的设计原则,它仅为一种思想、理论,为设计提供了基本的指导思想,并没有为实践提供具体的手段。

软件设计者掌握了LSP、OCP、DIP这些思想,但在实践中为了保证方案能够这些原则,还需要做出更多的设计决策,例如如何根据需求的变化点进行抽象、如何定义抽象类或接口、如何进行职责分配等。
这些设计决策取决于不同的业务场景,需要更多的实践经验和分析设计能力。那么有没有更直接的技术能够直接应用到各种场景中,并很好地遵循面向对象的设计原则呢?答案是有,这就是面向对象的设计模式。

“每一个模式描述了一个在我们的环境中不断重复发生的问题,以及该问题的核心解决方案。这样就能一次又一次地使用该解决方案,不必做重复劳动。”

面向对象的设计模式是系统设计中面临设计问题时的解决方案。不同于设计原则,每个设计模式都提供了具体的解决方案,包括且不限于抽象类或接口的定义、职责的分配等模型。

模式与设计模式

  • 模式分类
    • 设计模式的分类
    • 设计模式清单:
  • 目录1
  • 目录2

模式分类

设计模式的分类

  • 按照设计模式的作用范围(类或者对象实例)的角度可分为类模式和对象模式。
    • 类模式主要处理类和派生类之间的继承关系,这种关系是静态的、在编译期间确定的;
    • 对象模式主要处理对象之间的组织关系,这种关系是动态的、可在运行时变化的。
  • 按照设计模式的目的(完成哪类工作)的角度可分为创建型模式、结构型模式和行为型模式。
    • 创建型模式用于处理对象的创建过程,它的类模式是将对象的部分创建工作延迟到子类;它的对象模式是延迟到另一个对象中。
    • 结构型模式用来处理类或对象的组织结构,它的类模式使用继承机制来组合类;它的对象模式描述对象间的组装方式。
    • 行为型模式用来指导类和对象之间的交互及职责分配关系,它的类模式使用继承描述算法与控制规则;它的对象模式描述一组对象怎样协作完成单个对象无法完成的工作。
      p1

大部分设计模式都是对象模式,其中的适配器模式是唯一的既可以用类模式实现,又可以用对象模式实现的设计模式。

设计模式清单:

s1
s2
s3
s4
s5

目录1

目录2

相关文章:

  • 01用户登录,登出,token等框架说明
  • 几位阿里发布这份内部MySQL性能优化法则笔记
  • java-php-python-ssm巢院小区疫情管控系统计算机毕业设计
  • Linux基础 - 系统安全(SELinux与Firewalld)
  • 学完这份“顶级”SpringCloudAlibaba笔记,微服务竟如此简单
  • Spring注解驱动开发及源码解析
  • 2.1RDB、AOF及混合持久化详解Redis持久化
  • matlab基于PID反馈的主动隔振效果仿真分析
  • 力扣记录:Hot100(8)——253-322
  • 模板 cdq分治解三维偏序
  • C++/Qt音视频通话开发MetaRTC源码解读,coturn穿透stun的使用
  • Spring读取配置文件
  • MySQL进阶第八天——innodb引擎
  • Easy Yapi插件使用详情
  • 迪士尼这部影片让我看到了AR观影的未来
  • __proto__ 和 prototype的关系
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • angular组件开发
  • co.js - 让异步代码同步化
  • Flex布局到底解决了什么问题
  • Git的一些常用操作
  • iOS编译提示和导航提示
  • Javascript 原型链
  • js ES6 求数组的交集,并集,还有差集
  • k8s 面向应用开发者的基础命令
  • MD5加密原理解析及OC版原理实现
  • Redux系列x:源码分析
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 仿天猫超市收藏抛物线动画工具库
  • 利用DataURL技术在网页上显示图片
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端存储 - localStorage
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • k8s使用glusterfs实现动态持久化存储
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 数据结构
  • #git 撤消对文件的更改
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (分布式缓存)Redis哨兵
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • ***监测系统的构建(chkrootkit )
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(六):替换字符串中匹配的子串
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net8 Blazor 尝鲜
  • .net反编译的九款神器
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .net中生成excel后调整宽度
  • .net专家(张羿专栏)
  • .so文件(linux系统)
  • /etc/sudoer文件配置简析