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. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  2. CI-持续集成(1)-软件工业“流水线”概述

    CI-持续集成(1)-软件工业“流水线”概述 1   概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次, ...

  3. Hybrid App移动应用开发初探

    一.移动App类型及其优缺点 1.1 Native App Native App(原生App)是用原生语言(Object-C/Java/C#/....)开发,用户需要下载安装的手机应用. 优点是 可以 ...

  4. Meteor+AngularJS:超快速Web开发

        为了更好地描述Meteor和AngularJS为什么值得一谈,我先从个人角度来回顾一下这三年来WEB开发的变化:     三年前,我已经开始尝试前后端分离,后端使用php的轻量业务逻辑框架.但 ...

  5. QParserGenerator的文法文件介绍

    在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGen ...

  6. MyEclipse打开 HTML 报错Failed to create the part's controls

    拷贝代码时有时会弹出这个错误,页面仍然可以访问,但是无法编辑很郁闷.  MyEclipse默认打开编辑页面是MyEclipse visual html designer 右击html页面选择open  ...

  7. spring快速入门(四)

    一.在spring快速入门(三)的基础上,我们来了解BeanFactory及配置. Client package com.murong.client; import org.springframewo ...

  8. AngularJs之二

    今天先讲一个angularJs的表单绑定实例: <div ng-app="myApp" ng-controller="formCtrl"> < ...

  9. edit

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Wakatime 测试工作时间

    Wakatime – 现在几点了,你在做什么呢 前面提到了一个用来QS自己的工具Clarify.这次介绍一个专门给程序员用的工具.大家都知道一万小时定律,但我究竟写java写了多久了呢?WakaTim ...