设计模式和设计原则有什么区别?

What's the difference between design patterns and design principles?

我是 Rails 上 Ruby 的新手,我浏览了这些文章。

但我无法理解设计模式设计原则之间的实际区别。 有人可以解释一下区别吗?

设计原则:

设计原则是我们在设计软件时应该遵循的核心抽象原则。记住它们不是具体的——而是抽象的。只要我们在允许的条件内,它们可以以任何语言、任何平台应用,无论状态如何。

示例:

  • 封装变化。
  • 针对接口而非实现的程序。
  • 依赖于抽象。不要依赖于具体的 classes.

设计模式:

它们是针对现实世界中反复出现的问题的解决方案,因此我们不是重新发明轮子,而是遵循经过充分验证、经过他人测试并且可以安全遵循的设计模式。现在,设计模式是特定的;只有可以应用设计模式的条款和条件。

示例:

  • 单例模式(一个class一次只能有一个实例)

  • 适配器模式(匹配不同classes的接口)

下面的类比将帮助您更好地理解其中的区别:

原则:教人以教己教人,全面建设进步民族。

模式:在我们国家,每个医学博士毕业生都应该在偏远的村庄教书6个月才能完成his/her学位。

我觉得@ArslanAli的回答值得总结一下

  • 原则适用于所有编程。任何时候你选择不遵守原则,你都应该有一个很好的理由。
  • 模式适用于特定的常见问题。任何时候选择实施模式都应该有充分的理由。

原则是允许可扩展架构和软件工艺的最佳实践。设计模式是关于如何设计和构建代码的技术。每种设计模式都有不同的用例,适用于不同的场景。 另一方面原则;在大多数情况下,您需要遵循它们才能获得代码质量。 是的,一些原则暗示了一些设计模式:例如。 Open/Closed 原理与策略模式密切相关。 依赖注入与 MVC 模式有很强的联系。

在某种程度上,我们可以将原则称为我们在编程的每个步骤中都可以遵循的一组规则,但是模式是针对我们在编码过程中可能遇到的某些特定问题的一组结构化解决方案 - 并不总是发生.

设计原则

设计原则为设计更好的软件应用程序提供了高级指导。它们不提供实施指南,也不受任何编程语言的约束。 SOLID(SRP、OCP、LSP、ISP、DIP)原则是最流行的设计原则之一。

Single Responsibility Principle

Open/Closed Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle

例如,单一职责原则 (SRP) 建议 class 应该只有一个更改原因。这是我们在为应用程序设计或创建 classes 时可以牢记的高级声明。 SRP 不提供具体的实施步骤,但如何在您的应用程序中实施 SRP 取决于您。

设计模式

设计模式提供与实施相关的低级解决方案,常见的面向对象问题。换句话说,设计模式为特定的面向对象编程问题提出了特定的实现。例如,如果您想创建一个一次只能有一个对象的 class,那么您可以使用单例设计模式,它建议创建一个只能有一个对象的 class 的最佳方法对象。

设计模式已经过其他人的测试并且可以安全遵循,例如四种模式组合:抽象工厂、工厂、单例、命令等