📜  建筑风格,建筑模式和设计模式之间的区别

📅  最后修改于: 2021-04-16 03:16:26             🧑  作者: Mango

许多软件专业人员认为体系结构样式和模式是相同的。可悲的是,一些软件开发人员不了解架构模式和设计模式之间的区别。在本文中,我们将总结它们之间的差异。

根据MSDN,架构样式和模式是相同的。但是怎么可能呢?样式一词的意思是: “一种做事的方式”,而图案一词的意思是: “重复的装饰设计” 。但是,这些定义显示了两个不同的事物。在软件工程中,术语必须更清楚并描述特定的内容。那么,术语之间有什么区别,我们如何区分它们呢?

建筑风格

建筑风格显示了如何组织代码,或者从10000英尺的直升机视图中系统看起来如何,以显示系统设计的最高抽象水平。此外,在构建系统的体系结构样式时,我们将重点放在图层和模块以及它们如何相互通信上。

有多种类型的建筑风格,此外,我们可以将它们混合并产生一种混合风格,其中包括两种甚至更多种建筑风格之间的混合。以下是每个类别的建筑风格和示例的列表:

  • 结构架构样式:例如分层样式,管道和过滤器以及基于组件的样式。
  • 消息传递样式:例如隐式调用,异步消息传递和发布-订阅样式。
  • 分布式系统:例如面向服务,对等样式,对象请求代理和云计算样式。
  • 共享内存样式:例如基于角色的,黑板式的,以数据库为中心的样式。
  • 自适应系统样式:例如微内核样式,反射,特定于域的语言样式。

建筑图案

体系结构模式显示了如何使用解决方案来解决重复出现的问题。换句话说,它反映了代码或组件之间如何交互。此外,架构模式描述了我们系统的架构风格,并为我们的架构风格中的问题提供了解决方案。就我个人而言,我更喜欢将建筑模式定义为一种实现我们的建筑风格的方式。例如:如何以我们的架构风格分隔数据模块的UI?如何将第三方组件与我们的系统集成?我们的客户端-服务器体系结构中将有多少条轮胎?架构模式的示例是微服务,消息总线,服务请求者/使用者,MVC,MVVM,微内核,n层,域驱动设计和表示抽象控制。

设计模式

设计模式是累积的最佳实践和经验,多年来,软件专业人员使用它们来解决软件开发过程中遇到的一般问题(反复试验)。 “四人帮”(GOF,指的是Eric Gamma,Richard Helm,Ralf Johnson和John Vlissides)在1994年写了一本书,题为“设计模式-可重用的面向对象软件的元素”,他们认为设计模式是基于关于面向对象设计的两个主要原则:

  • 开发为接口,而不是实现。
  • 优先考虑对象组成而不是继承。

此外,他们还提出设计模式集包含23个模式,并分为三大类:

1.创作设计模式:
提供一种在隐藏创建逻辑的同时创建对象的方法。因此,无需使用“ New”关键字直接实例化对象就可以完成对象创建,从而可以灵活地确定在给定用例下需要创建哪些对象。创新的设计模式是:

  • 抽象工厂模式:提供一个无需指定类即可创建对象的接口。
  • 单例模式:仅提供呼叫的单个实例以及对该实例的全局访问。
  • 构建器模式:将构造与制图表达分开,并允许同一构造创建多个制图表达。
  • 原型模式:创建副本而不影响性能和内存。因此,重复对象是从现有对象的骨架中构建的。

2.结构模式:

与类和对象组成有关。结构设计模式为:

  • 适配器模式:它充当两个不兼容接口之间的桥梁,并组成了它们的功能。
  • 桥接模式:提供一种将抽象与其实现分离的方法。
  • 过滤器模式:也称为标准模式,它提供了一种使用不同标准过滤一组对象并通过逻辑操作以解耦的方式链接它们的方法。
  • 复合模式:提供一种以与单个对象相似的方式对待一组对象的方法。它以树结构的形式构成对象,以表示部分以及整个层次结构
  • 装饰器模式:允许在不更改其结构的情况下向现有对象添加新功能。
  • 外观模式:为一组接口提供统一的接口,它隐藏了系统的复杂性,并为客户端提供了一个接口,客户端可以使用该接口访问系统。
  • Flyweight模式:减少创建的对象数量并减少内存占用并提高性能。它通过存储已存在的同类对象来帮助重用它们,并在找不到匹配的对象时创建一个新对象。
  • 代理模式:为另一个对象提供占位符,以控制对其的访问。该对象具有原始对象,以将其功能与外界联系。

3.行为模式:

行为模式与对象之间的通信有关。以下是行为模式的列表:

  • 责任模式:为请求创建接收方对象链。此模式根据请求的类型将请求的发送者和接收者解耦。
  • 命令模式:这是一种数据驱动的模式,其中将请求作为命令包装在一个对象下,然后传递给调用者对象。
  • 解释器模式:提供一种评估语言语法或表达的方式。它涉及实现一个表达式接口,该接口告诉您解释特定的上下文。此模式用于SQL解析,符号处理引擎等。
  • 迭代器模式:提供一种以顺序方式访问集合对象的元素的方式,而无需了解其基础表示形式。
  • 中介器模式:用于降低多个对象或类之间的通信复杂性。它提供了一个调解器类,该类通常处理不同类之间的所有通信,并通过松散耦合来支持代码的轻松维护。
  • 记忆模式:用于将对象的状态恢复到先前的状态。
  • 观察者模式:在对象之间存在一对多关系时使用,例如,如果修改了一个对象,则将自动通知其从属对象。
  • 状态模式:用于根据其状态更改类的行为。
  • 空对象模式:通过使用默认对象,有助于避免空引用。
  • 策略模式:提供一种在运行时更改类行为或其算法的方法。
  • 模板模式:抽象类公开定义的方式/模板来执行其方法。它的子类可以根据需要重写方法的实现,但是调用的方式应与抽象类所定义的方式相同。
  • 访客模式:用于更改元素类的执行算法。

可以将设计模式的另外两个子集添加到设计模式的3个类别中:

  • J2EE模式:模式专门与表示层有关。这些模式由Sun Java Center标识。
  • 并发模式:例如:禁止,连接,锁定和线程池模式

底线:

建筑风格是系统的10000架直升机视图。它以最高抽象级别显示了系统设计。它还显示了应用程序的高级模块以及这些模块如何交互。另一方面,体系结构模式在水平和垂直方向上对系统实现都具有巨大的影响。最后,设计模式用于解决软件实施过程中的局部问题。而且,由于设计模式更关注代码实现的特定部分,例如初始化对象和对象之间的通信,因此与体系结构模式相比,它对代码的影响较小。