模式与原理的区别


20

面向对象的设计模式和原理之间有什么区别?他们是不同的东西吗?据我了解,他们两个都试图实现一些共同的目标(例如灵活性)。那么我可以说模式是原则,反之亦然吗?

设计原理= SOLID(即依赖反转原理)

设计模式= Gof(即抽象工厂模式)

Answers:


24

不,他们不一样。

模式是面向对象编程问题的常见解决方案。(我不知道有任何类似的有关函数式或声明式编程的书。)这个想法在1995年由“四人帮”编写的著名的“设计模式”书中得到了体现。

正如安德烈(Andre)所指出的,模式在每种范式中都很普遍。我要重申一下我以前的声明:不知道有任何类似的有关函数式或声明式编程的书,但是Andre通过下面提供的链接弥补了我的无知。(谢谢安德烈。)

原则较少涉及特定语言或范式,而是较笼统。DRY原则“不要重复自己”对于所有编程都是如此。


4
模式存在于每个范式中。杰里米·吉本斯Jeremy Gibbons)正在写一本书,叫做《函数式编程中的模式》(并在此博客)。顾名思义,模式就是重复出现的设计,可以解决类似的问题。它们无处不在,尽管您可能并不总是认识它们。
安德烈Paramés

@AndréParamés快速浏览使我相信Jeremy Gibbons在谈论语言习语,而不是设计模式。
Izkata 2012年


19

这些概念并不相同:

* 设计原则:*软件设计原则代表了一组准则,可帮助我们避免进行不良设计。喜欢:开闭原则

* 设计模式:*设计模式是在软件设计中给定上下文中对常见问题的通用可重用解决方案。喜欢:单身


7

模式是原则,什么实现是模式。

原则是“间接”,这可以通过“工厂”模式完成,该模式最终通过带有工厂方法的类来实现。


3

好吧,原则是规则,模式是其具体示例。


1
你能举一些例子吗?

请告诉我们要求工厂或责任链或轻重的原则。
duffymo 2012年

2
例如,@ duffymo井工厂遵循依赖性反转原理(非注入);客户端和实例都依赖于抽象-接口。责任链基于松散耦合和分离控制对象的原则。我相信Flyweight仅能提高性能。
m3th0dman '11

3

模式比原则更重要。模式可以解决特定问题。原则可以适用于任何地方,无论上下文如何。实际上是基于原理的模式(SRP,DRY等)

EG让我们来看看策略模式。它定义了一系列算法,将每个算法封装在一起,并使它们可互换。因此,这里有高级算法概念。使用状态模式,您具有高级状态概念。使用原则,您没有任何高级概念。原则是基础,构图者用来实现目标。实施策略模式时,将使用SOLID:

  • SRP-您定义代码,该代码负责算法并从另一个代码中提取它。
  • OCP-您定义抽象,代表所有不同的算法并使用它
  • LSP-您不在客户端代码中使用具体的算法类,而仅使用抽象

5
实际上,模式的水平低于原则。也就是说,在这种情况下,模式比原则更接近实际实现。换句话说,原则比模式更抽象,原则意味着一般的设计准则和表示适合特定问题类别的解决方案的模式。

@Jarkko看看我的例子。当我谈论级别时,我的意思是模式是基于原则的,而不是相反。砖头不是比建筑更高级的东西。

4
我可以明白您的意思,并了解您对此事的想法。但是,这与软件上下文中“高级”和“低级”概念的一般含义相反。(出于某种原因,我无法@ -tag您。)

1
“模式比原则更重要。” 我请求不同==>模式接近实现(即低级别),而原理则是高级规则。

2

模式最初是为架构记录的。在建筑中,适用于从在房间中放置门到村庄布局的事物。

四人帮将这一思想应用于面向对象的编程。可以使用多个模式来解决问题,但是每种模式都有特定的实现。模式在其他编程方法中也存在,但是我不知道有任何适用的书籍。正如其他人提到的那样,模式涵盖了特定的实现。在不适用的情况下使用模式通常被视为反模式。

尽管可以有标准的实现方法,但原则并不涵盖实现。原则更多的是涉及一般性问题,而不是特定性问题。对于控制反转,我知道至少三种实现方法。对于DRY(不要重复自己),尽管我使用了几种方法,但我不知道具体的实现方法。

考虑

  • 已要求您使用诸如抽象工厂模式之类的模式作为开发程序的唯一方法。这样合适吗?不,那么很可能是模式。
  • 已要求您将DRY应用于所有组件?这样合适吗?是的,那么它更有可能成为一项原则。

1

OO设计原则

OO原则是确保OOP概念的一组准则。基于OOP的概念,这定义了设计更好的方法,更好的设计的方法。OO设计的基本原则是SOLID。

设计模式提供了针对设计问题的一般解决方案。请注意,“设计模式”也可以应用于中午面向对象的单词。因此,OO设计模式(OODP)是为基于OO的面向对象设计提供通用解决方案的模式。设计模式是发现的,而不是发明的。定义OODP的方法有多种,最著名的一种是BSC(行为结构创新)。

以下是详细说明的链接。 http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.