理解软件设计模式


理解软件设计模式

文章插图
 
设计模式可以帮助消除冗余代码 。学习如何利用 JAVA 使用单例模式、工厂模式和观察者模式 。
-- Bryant Son(作者)
如果你是一名正在致力于计算机科学或者相关学科的程序员或者学生,很快,你将会遇到一条术语 “ 软件设计模式(software design pattern)” 。根据维基百科,“ 软件设计模式 是在平常的软件设计工作中所遭遇的问题的一种通用的、可重复使用的解决方案” 。我对该定义的理解是:当在从事于一个编码项目时,你经常会思考,“嗯,这里貌似是冗余代码,我觉得是否能改变这些代码使之更灵活和便于修改?”因此,你会开始考虑怎样分割那些保持不变的内容和需要经常改变的内容 。
设计模式是一种通过分割那些保持不变的部分和经常变化的部分,让你的代码更容易修改的方法 。
不出意外的话,每个从事编程项目的人都可能会有同样的思考 。特别是那些工业级别的项目,在那里通常工作着数十甚至数百名开发者;协作过程表明必须有一些标准和规则来使代码更加优雅并适应变化 。这就是为什么我们有了 面向对象编程 (OOP)和 软件框架工具。设计模式有点类似于 OOP,但它通过将变化视为自然开发过程的一部分而进一步发展 。基本上,设计模式利用了一些 OOP 的思想,比如抽象和接口,但是专注于改变的过程 。
当你开始开发项目时,你经常会听到这样一个术语重构,它意味着通过改变代码使它变得更优雅和可复用;这就是设计模式耀眼的地方 。当你处理现有代码时(无论是由其他人构建还是你自己过去构建的),了解设计模式可以帮助你以不同的方式看待事物,你将发现问题以及改进代码的方法 。
有很多种设计模式,其中单例模式、工厂模式和观察者模式三种最受欢迎,在这篇文章中我将会一一介绍它们 。
如何遵循本指南无论你是一位有经验的编程工作者还是一名刚刚接触的新手,我想让这篇教程让每个人都很容易理解 。设计模式概念并不容易理解,减少开始旅程时的学习曲线始终是首要任务 。因此,除了这篇带有图表和代码片段的文章外,我还创建了一个 GitHub 仓库,你可以克隆仓库并在你的电脑上运行这些代码来实现这三种设计模式 。你也可以观看我创建的 YouTube视频。
必要条件如果你只是想了解一般的设计模式思想,则无需克隆示例项目或安装任何工具 。但是,如果要运行示例代码,你需要安装以下工具:
  • Java 开发套件(JDK):我强烈建议使用 OpenJDK。
  • Apache Maven:这个简单的项目使用 Apache Maven 构建;好的是许多 IDE 自带了Maven 。
  • 交互式开发编辑器(IDE):我使用 社区版 IntelliJ,但是你也可以使用 Eclipse IDE 或者其他你喜欢的 Java IDE 。
  • Git:如果你想克隆这个工程,你需要 Git 客户端 。
安装好 Git 后运行下列命令克隆这个工程:
git clone https://github.com/bryantson/OpensourceDotComDemos.git然后在你喜欢的 IDE 中,你可以将 TopDesignPatterns 仓库中的代码作为 Apache Maven 项目导入 。
我使用的是 Java,但你也可以使用支持 抽象原则 的任何编程语言来实现设计模式 。
单例模式:避免每次创建一个对象单例模式 (singleton pattern)是非常流行的设计模式,它的实现相对来说很简单,因为你只需要一个类 。然而,许多开发人员争论单例设计模式的是否利大于弊,因为它缺乏明显的好处并且容易被滥用 。很少有开发人员直接实现单例;相反,像 Spring Framework 和 google Guice 等编程框架内置了单例设计模式的特性 。
【理解软件设计模式】但是了解单例模式仍然有巨大的用处 。单例模式确保一个类仅创建一次且提供了一个对它的全局访问点 。
单例模式:确保仅创建一个实例且避免在同一个项目中创建多个实例 。
下面这幅图展示了典型的类对象创建过程 。当客户端请求创建一个对象时,构造函数会创建或者实例化一个对象并调用方法返回这个类给调用者 。但是每次请求一个对象都会发生这样的情况:构造函数被调用,一个新的对象被创建并且它返回了一个独一无二的对象 。我猜面向对象语言的创建者有每次都创建一个新对象的理由,但是单例过程的支持者说这是冗余的且浪费资源 。
 
理解软件设计模式


推荐阅读