什么是设计模式?

目录

概述:

什么是模式!!

为什么学习模式!!

模式和框架的比较:

设计模式研究的历史

关于pattern的历史

Gang  of  Four(GoF)

关于”Design”Pattern”

重提:指导模式设计的三个概念

 1.重用(reuse):是目标

 2.接口与实现分离

 3.Decouple

如何描述一个模式

 1.关键要素

 2.解决方案

 3.评测

 4.相关模式


概述:

什么是模式!!

     每个模式概述了一个问题,该问题反复在我们的周围出现,每个模式给出了对该问题的核心解决办法,因此,人们可以反复给出了对该问题的核心解决办法,人们可以反复使用给解决方法解决类似问题。

为什么学习模式!!

      1.模式可以帮助我们学习成功人士的经验,从而避免失误
      2.提升我们的认知
      3.读懂源代码,提升自己代码的水平
      4.面试工作的必备技能

模式和框架的比较

  1.模式(Patterns)

  1.1支持软件的结构和设计的重用

  1.2抓住了特定领域中问题的成功解决方案中的静态,动态结果和相互之间的协作关系

  1.3patterns与开发语言无关,但是建立在一定的环境基础上

  1.4例如:经典的MVC、Factory Method

   2.框架(Frameworks)

   2.1支持细节设计和代码的重用

   2.2framework是一组组件的综合,这些组件相互协作,为一族相关应用提供了一个可重用的框架结构

   3.两者结合

   3.1提高软件的质量
   3.2重用性,扩展性,性能,可维护性

   4.框架的HOllyood Principle

        -(“Don’t call us,We’ll call you.”)

   5.模式和框架的比较:

   5.1设计模式比框架更抽象

   5.2和框架相比,设计模式是更小单元的架构元素

   5.3从使用的广度来说,设计模式比框架更广,它与应用的相关性更小

设计模式研究的历史

关于pattern的历史

     -A Pattern Language, Christopher Alexander,1997

     -”Advanced C++ : Programming  Styles and ldims,” James Coplien, 1992

     -”Design Patterns: Elements of Reusable Object - Oriented Software”,GOF,1995

     -”Pattern-Oriented Software Architecture: A System of Patterns”(简单”POSA”),GoV,1996

Gang  of  Four(GoF)

关于DesignPattern

1.对已有模式的整理、分类

2.一套描述模式的词汇,可用于交流和文档化

3.为软件设计总结了宝贵的经验,这些设计经验可以被重用,但不是简单的代码重用

4.分类:

  -Creational Patterns

  -Structural Patterns

  -Behavioral Patterns

5.在软件设计模式领域,起到先驱的作用

重提:指导模式设计的三个概念

 1.重用(reuse):是目标

  -两种重要的重用手段

  ·Inheritance & composition

 2.接口与实现分离

   -接口保持不变,分离带来

   -多态性(polymorphism)

 3.Decouple

  -降低复杂性

如何描述一个模式

 1.关键要素

   -模式名称

   -问题,动机

   -约束

   -上下文

 2.解决方案

   -结构(Structure)

   -参与者(Participants)

   -协作(Collaboration)

   -实现(Implementation)

 3.评测

 4.相关模式

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction

函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction 1.Consumer Java Consumer接口来自Java 8中引入的 java.util.function包。 Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。 Cons…

opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

绘制图像轮廓:drawContours函数 在 OpenCV 中,可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是: imagecv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]…

c基础扫雷

和三子棋一样,主函数先设计游戏菜单界面,这里就不做展示了。 初始化棋盘 初级扫雷大小为9*9的棋盘,但排雷是周围一圈进行排雷(8格),而边界可能会越界。数组扩大了一圈,行和列都加了2,所以我们用一个11*11的数组来初始化…

计算机科技历史纵横:8月6日的十大里程碑

计算机科技历史纵横:8月6日的十大里程碑 目录 引言1951年:EDSAC电脑完成第一个实际计算任务1964年:IBM发布System/360系列1973年:Xerox PARC开发出第一台个人电脑Xerox Alto1976年:Apple发布Apple I电脑1981年&#…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址(点对点、一对一)2. 功能寻址(广播、一对多)3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF(Single Frame)2. 首帧 FC&a…

教你一招:非计算机科班如何丝滑转码?

近年来,很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码? 目录 一、确定方向 二、确定学习计划(自学) 三、学习 看到组里好多非科班姐妹决定转码之后,因为相关背景知识不足难以确定学习计划&am…

【机密计算-大厂有话说】微软 Open Enclave SDK

前言 机密计算是基于硬件支持的可信执行环境的,比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE,不过这些异构的 TEE 之间差异还是蛮大的,所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK,这就是本文将要…

JavaScript 中替换所有匹配项的自定义函数非正则表达式

引言 在 JavaScript 中,字符串替换是常见的操作之一。虽然 JavaScript 提供了一些内置的字符串方法来实现替换,比如 replace() 方法,但它只会替换第一个匹配到的项。如果我们想要替换所有匹配到的项,就需要自己编写一个函数。本文…

生成测试报告,在Unittest框架中就是简单

测试套件(Test Suite)是测试用例、测试套件或两者的集合,用于组装一组要运行的测试(多个测试用例集合在一起)。 (1)创建一个测试套件: import unittest suite unittest.TestSuite…

面向开发人员的 Spring Boot 最佳实践

Spring Boot是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧,您可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长,完整读完文章需要一些时间。 正确的包装风格 正确的打包将有助于轻松理解代码和…

STL模板——vector详解

一、vector对象的定义和初始化方式 vector 中的数据类型 T 可以代表任何数据类型,如 int、string、class、vector(构建多维数组) 等,就像一个可以放下任何东西的容器,因此 vector 也常被称作容器。字符串类型 string …

ElasticSearch索引生命周期管理--DELETE

概要 ElasticSearch中的索引生命周期管理,也就是ilm(Manage the index lifecycle),是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段:hot 、warm、cold和delete。hot、warm和cold表示…

【VUE】项目本地开启https访问模式(vite4)

在实际开发中,有时候需要项目以https形式进行页面访问/调试,下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档:开发服务器选项 | Vite 官方中文文档 ps:首次操作,不要被类…

Pyspark

2、DataFrame 2.1 介绍 在Spark语义中,DataFrame是一个分布式的行集合,可以想象为一个关系型数据库的表,或者一个带有列名的Excel表格。它和RDD一样,有这样一些特点: Immuatable:一旦RDD、DataFrame被创…

ssm+vue基于java的少儿编程网上报名系统源码和论文PPT

ssmvue基于java的少儿编程网上报名系统源码和论文PPT006 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 在国家重视教育影响下,教育部门的密确配合下&#…

沐渥六门氮气柜技术参数详解

氮气柜是用来存储电子元器件、芯片、半导体器件、金属材料、电路板、精密仪器等物品的设备,通过充入氮气降低柜内湿度,达到防潮、防氧化、防静电、防锈和防霉效果。 六门氮气柜参数 1、容积:约1380L;外尺寸:W1200*D700…

一零六八、回顾MySQL关键字排序

一、 关键字书写顺序 select distinct from join on where group by having union (all) order by limit二、 关键字实际执行顺序 from on join where group by having select distinct union (all) order by limit个人理解&…

100G光模块的应用案例分析:电信、云计算和大数据领域

100G光模块是一种高速光模块,由于其高速率和低延迟的特性,在电信、云计算和大数据领域得到了广泛的应用。在本文中,我们将深入探讨100G光模块在这三个领域的应用案例。 一、电信领域 在电信领域,100G光模块被广泛用于构建高速通…

QT- QLineEdite设置自动补全功能,并修改自动补全的样式

#include <QApplication> #include <QLineEdit> #include <QCompleter> #include <QStringListModel> #include <QMainWindow>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个字符串列表模型QStringListModel mode…

python流程控制语句学习笔记

if语句的使用 一、if判断语句介绍 if语句是用来进行判断的&#xff0c;其使用格式如下&#xff1a; if 要判断的条件: 条件成立时&#xff0c;要做的事情 demo1: age 30 print("------if判断开始------") if age > 18: print("我已经成年了") print…