Design Patterns Simplified: Part 1【设计模式简述:第一部分】

Design patterns are an important consideration when designing or developing any software systems or solutions. There is so much buzz around patterns. At the same time, we often get confused about their use. Basically we get questions like the following:

在设计或者开发任何软件解决方案的时候,设计模式都是一个重要的考虑因素。有这么多声音都围绕着设计模式,我们通常就会很疑惑关于设计模式的使用。基本上,我们的问题有下面这些:

  • What design patterns are【什么是设计模式】
  • Why to use them【为什么要使用设计模式】
  • When to use them【什么时候使用设计模式】
  • How many patterns we have【总共有多少设计模式】

In the first part of the series around design patterns, we will try to discuss and answer these questions.

在设计模式系列的第一部分,我们将会来讨论和回答这些问题。

What design patterns are【什么是设计模式】

Design patterns are basically proven solutions to common design problems. They can also be defined as recommended practices to solve any recurring problem in application design.

设计模式是常见的设计问题的解决方案。它们同样可以作为程序设计过程中反复出现的问题的解决方案。

Please be clear that, design patterns are not ready-to-use code that can be used directly, instead they present approaches or recommendations to solve daily design challenges.

这里要说清楚的是,设计模式不是现成的代码,可以直接使用,相反,对于日常设计中出现的挑战, 设计模式是用来提供解决方法或者可行性建议的。

Why to use them【为什么要使用设计模式】

The reason for usign them is simple. Why re-invent the wheel, when we have workable, tested and well documented solutions for a set of common recurring problems?

使用设计模式的原因很简单。为什么,要重复造轮子?对于一系列反复出现的问题,我们是否有可行的,容易测试的,并且有提供文档形式的解决方案么?

We should use design patterns (when required) to design and develop reusable and scalable components that in turn helps the development team to finish the development activities in due time while attaining high quality.

在需要的时候, 我们应该使用设计模式,来设计和开发可重用和可扩展的组件,从而帮助开发团队在规定的时间内,高效有质量地完成开发任务。

Designing an application in a standard or tested fashion also helps other developers and code reviewers to understand the written code easily.

以一个标准设计应用程序,同样可以帮助其他的开发者和代码Review人员更好的测试并理解代码是怎么写的。

When to use them【什么时候使用设计模式】

This is a very pertinent issue and we should be well aware of their usefulness. Using design patterns without evaluating them properly can make the design unnecessarily complex.

这是一个非常中肯的问题,我们应该清楚设计模式的适用性。使用设计模式的时候,没有很好的评估,将会使得设计变得不必要的复杂。

There could be instances when you might not need them at all and you can simply live with basic OOP design principles.

可能存在这样的情况:你可能不需要设计模式,你可以简单地使用基本的面向对象设计原则。

Whether to use them or not depends on the scenario at hand. Each pattern talks about specific design problems and the standard solution for that. So before using them, spend a fair amount of time in analyzing your design issues and try to match it with the once-discussed in patterns.

是否使用设计模式,取决于你的实际情况。每个模式讨论特定的设计问题和标准的解决方案。所以在使用它们之前,花点时间,来分析你的设计问题,试图使用一种设计模式来与之对应,那么就可以使用这个模式,来解决你的设计问题了。

I would like to emphasize the point that the key to find the right pattern is to understand and identify the scenario that any pattern is trying to address.

我想强调一点,找到合适的模式的关键是理解和识别,用什么设计模式来解决问题。

Once you find the right pattern for your specific problem or scenario, you can apply it to your software design.

只要你发现了适用你的问题的模式,你就可以应用它,来解决你的软件设计出现的问题。

The many patterns【总共有多少设计模式】

There is no specific number of patterns, since they kind of evolve over time and the software industry has used and tested them. Having said that, there are folks like the “Gang of Four” that have well-documented and popularized them in the software development community. I also find SOLID design principles to be worth refer to.

这里没有固定数量的设计模式,因为软件行业使用和测试的设计模式,随时间而变化。说道这里,例如“Gang of Four”在软件社区很受欢迎。我也发现可靠的设计原则是值得参考的。

To summarize the discussion, I would like to say to start your design with a few basic design principles, like clean coding, loose coupling and modular design and so on and continue to evaluate design challenges with known and existing issues discussed in design patterns. After evaluation, if you find any matching pattern then go ahead and use it else stick to whatever you have designed.

最后总结一下,我想说的是,开始考虑为你的设计,使用一些设计原则,例如,干净的Coding,松耦合,模块化设计等等,并且继续评估设计模式中已知和已经存在的问题。评估完之后,只要发现能够解决你的问题的设计模式,那么就赶紧使用,推翻你之前的设计。

One last thing. Please don't force your application to use design patterns. Instead use them only if it makes sense.

最后一件事,不要强制为应用程序,应用设计模式。只有当应用设计模式的时候,能够解决问题,才去使用它。

I hope you have liked the article. Please share your comments.

我希望你喜欢这篇文章,请留下你的评论,谢谢~~~.

 

【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】的更多相关文章

  1. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  2. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  3. 设计模式学习系列6 原型模式(prototype)

    原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可. 1 ...

  4. 设计模式学习系列9 外观模式Facade

    1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改 ...

  5. 设计模式学习系列(一)——IOC设计原则

    参考转载自IoC 之 2.1 IoC基础 ——跟我学Spring3

  6. 设计模式功能概述(Design Patterns)

    1.Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 2.Adapter:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于 ...

  7. Scala学习系列(一)——Scala为什么是大数据第一高薪语言

    为什么是Scala 虽然在大数据领域Java的使用更普及,Python也有后来居上的势头,但Scala一直有着不可动摇的地位.我们熟悉的Spark,Kafka,Flink都是由Scala完成了其核心代 ...

  8. 我的设计模式学习笔记------>Java设计模式总概况

    设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的 ...

  9. 设计模式(Design Patterns)Java版

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

随机推荐

  1. Remote Desktop Connection Manager

    通过Remote Desktop Connection Manager(RDCMan),当前最新版本是 v2.7. 通过这款软件,我们便可以轻松的管理和访问数个RDP.左边的列表中我们可以创建总的分区 ...

  2. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  3. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  4. 扩展Bootstrap Tooltip插件使其可交互

    最近在公司某项目开发中遇见一特殊需求,请笔者帮助,因此有了本文的插件.在前端开发中tooltip是一个极其常用的插件,它能更好向使用者展示更多的文档等帮助信息.它们通常都是一些静态文本信息.但同事他们 ...

  5. Objective-C中的Strong、Copy与MutableCopy

    面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www ...

  6. 用python实现的百度音乐下载器-python-pyqt-改进版

    之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt ...

  7. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  8. K-Means聚类和EM算法复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 k-means算法是一种得到最广泛使用的聚类算法. 它是将各个聚类子集内 ...

  9. 《Spark大数据处理》—— 读后总结

    前几章 工作机制

  10. crossplatfrom---electron入门教程

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...