初学者设计模型
已发表: 2016-01-13如果您已经为产品或软件应用程序编写过程序,无论大小,您很可能使用过很多设计模式……尽管它们可能不是最常用/标准的设计模式之一。
但是,是的,实现设计模式和“使用”设计模式之间有明显的区别……无论哪种方式,使用设计模式的人都理解它,或者很容易理解它。
关键是,设计模式对程序员来说并不新鲜。
在下面的这篇文章中,我试图解释设计模式的基础知识,我们将在另一篇文章中研究各种模式、示例等的细节。
什么是设计模式?
开始…
我认为从理解设计模式开始的最好方法是理解我们在日常生活中有意/无意地遵循的非技术模式。
例如,让我们为一个职位空缺提交大量的简历。 每个人的简历看起来都不一样……尽管他们都倾向于做同样的事情,那就是告诉读者他们擅长什么,或者他/她如何适合这份工作。
大多数向工作提交简历的人都知道,他们需要在格式化的 Word 文档中提交包含特定信息集的简历。
这……是一种模式,每个人都会提交一份简历,其中包含一组特定的信息。
如果你觉得……称之为模板而不是模式。 设计模板。
现实生活中有很多这样的事情是模式。 有些人喜欢下面的例子:
全球所有厨师都以同样的方式烹制比萨饼或炸薯条。 虽然他们可能会在上面/味道不同。 那是一种模式。
每辆车的设计都遵循一个基本的设计模式,四个轮子、方向盘、油门-刹车-离合器等核心驱动系统。
所有重复建造/生产的东西,都不可避免地会在其设计中遵循某种模式……无论是汽车、披萨、ATM 机,等等……甚至是牙刷。
几乎已成为在软件中编码某些逻辑/机制/技术的标准方式的设计,因此被称为 - 并因此 - 被研究为软件设计模式。
为什么设计模式很重要?
基本上有两个原因:
- 坚持一个标准
- 加快发展
我会详细解释。
首先,我们明白为什么坚持标准模式很有趣。
让我们以我们之前讨论过的简历示例为例。
可能有一两个申请人通过电子邮件文本发送他们的工作申请,没有适当的格式,没有附件到他们的电子邮件等,..这一两个申请人没有遵循模式..并且不太可能最终随着工作...... 为什么? 因为他们偏离了一个既定的模式,这可能不被那些为这份工作列出简历的人所喜欢。
没有人会偏离模式变“酷”吗? 这不就是创新吗?
是的,有时候,一份非常不同的简历会因为与其他人不同而获得这份工作。 通常我听说过一些网页设计师找到了主要工作,因为他们编译并展示了他们工作的 CD 电影,或者制作了一个动画角色来解释他们的工作,把它放在他们的博客上,等等。
但是..这是实验(创新来自成功的实验)。
大多数情况下,在软件开发中,由于时间压力、期望等原因,您无法承担实验费用,但有时,一些有趣的项目确实允许进行一些实验。
在软件中,我们不能做诸如银行存款之类的基本事情……以 101 种方式……处理银行存款的方法只有几种……所以遵循一个既定且经过测试的模式是有意义的。
此外,大多数设计模式都有变体……其中一些变体非常流行,以至于这些变体也将成为该模式的新标准类型。
如今的软件项目预计(至少隐含地)将遵循市场上已经建立的类似产品/软件的设计。
这就是坚持标准编码风格或设计模式有助于软件开发的地方......加快开发,消除担心新的未经测试的实现的开销等,
加快开发时间
遵循标准设计模式还具有通过软件架构师、模块负责人、团队负责人、开发人员等的树/层次结构轻松交流的优势,关于“如何”开发某些东西,而不仅仅是“必须是什么”发达。
有时它甚至可以帮助测试团队,因为测试人员会根据经验知道,遵循特定设计模式的代码可能可以在特定时间段内使用一组测试工具以特定方式进行测试,而这种已知设计可能没有一些缺陷或有一些“已知”的缺陷。
使用设计模式不会带走个人风格吗?
不。首先,因为我们并不是说您遵循设计模式并且没有其他任何事情发生。 大多数项目实施只与其他项目共享基本要求,并且很可能会有偏差。 构建这些偏差将需要弯曲和拉伸实现中使用的标准模式。
这就像以标准方式制作比萨饼,然后根据不同的要求对其进行调味/呈现,例如完整的馅饼比萨饼,或切好的馅饼,或其他任何东西。
在理解设计模式的重要性时,有一点非常重要:

设计模式不是特定公司或编程语言强加给我们的任何技术或框架。 这意味着,它就像一个开放的概念......你可以自由地接受它,使用它,根据你的需要修改它,重要的是......感觉它是你自己的。
实际上,所有标准或流行的设计模式都具有很强的可扩展性。它们之所以流行,首先是因为很多人使用它。而且很多人使用它只是因为它们可以灵活地满足他们的要求。
或者您认为标准设计模式如何适合新泽西州的公司项目以及班加罗尔的不同公司和不同类型的项目。
这使我们想到“大多数设计模式都是通用的”……这意味着它们并不总是用于构建相同类型的软件。 您可能听不到常见讨论中使用的“银行软件设计模式”或“社交网络软件设计模式”之类的东西……而只有“设计模式”。
谁应该为设计模式而烦恼?
- 就像一个优秀的建筑架构师如何提高他/她的建筑设计技能一样,通过在他/她的一生中研究无数建筑物和形状的架构和设计,软件架构师应该研究和想象全球不同的软件/技术系统是如何设计的或架构的。
- 就像建筑物的建筑工人应该如何从自己的经验或从建筑物的建筑师那里了解实现建筑设计的不同方式一样。
软件开发人员/程序员应该了解基本的软件设计模式及其实现代码……无论是他们自己还是来自指导团队按照特定模式开发它的软件架构师。
基本代码模式
在本文的开头,我说过任何程序员都会使用设计模式。 以下是一些遵循模式的非常基本的代码示例。
- 以下是一个基本的拦截过滤器设计模式。
- 隐藏复制代码
- [代码]
开关(条件){
案例价值1:
案例价值2:
默认:
}
[/代码] - 事件触发器、事件处理程序......属于基本的主题观察者设计模式。 我们将很快讨论每种模式的标准、流行的变体以及示例。
- 如果您使用过某种集合,例如 C# 中的 Arraylist,并遍历该数组,那么您就使用了基本的迭代器设计模式。
- 以下代码是基本异常处理/责任链模式的示例。
- 隐藏复制代码
- [代码]
尝试{
}catch(异常前){
}
最后{
}
[/代码]
设计模式的不同领域
除了设计模式之外,软件中有不同的术语。其中一些通常与我们迄今为止讨论的设计模式相关。还有一些完全不相关。
到目前为止,我们在上面讨论的内容有时被称为“实现设计模式”。
还有其他的,比如架构模式、框架模式、语言模式(主要称为语言结构)。
它们是放置在不同层次上的模式……就像语言模式是作为 C#/Java 等编程语言的一部分实现的模式,作为语言的特性/结构……我们已经看到了其中的一些。
上述所有主题观察者、拦截过滤器等示例,都被吸收为 C 之后所有流行的高级编程语言中的语言结构。
架构模式是软件架构的标准模型,通常指的是放置或链接模块或层或层的不同方法,以构成完整的应用程序。
这与编码/编程意义上的设计模式完全无关……但它们对本文中讨论的为什么/什么的答案相同。
框架模式也与我们对设计模式的讨论无关。 当 .NET 等框架通过框架的内置方法或对象轻松实现记录错误或跟踪代码执行路径的特殊方法时,此类机制称为框架模式。
.NET Framework 中的一些示例包括 stackTrace 功能、在类/方法定义之上带有 [] 方括号的类属性功能等。使用这些功能时,我们使用框架的内置模式进行编码。
我希望这篇文章有助于提供设计模式和相关术语的概述。
到目前为止,我们只讨论了标准是什么以及它们的重要性。但我们没有讨论标准模式本身是什么。
执照
本文以及任何相关的源代码和文件均根据代码项目开放许可证 (CPOL) 获得许可。