夜深了,人静了,该写点儿东西了。这是第一篇博客,写点儿对设计模式的粗浅理解吧。
 
什么是设计模式?
上学那会儿初次听到这个名字一点儿概念都没有,不知道它是用来干嘛的,感觉听上去挺抽象的一个东西。
工作了这么多年以后,我也不去引用那些随处可得的文字了,就凭自己的理解在这里瞎说一通吧,对不对您给个评论,咱们多交流。
 
先说点儿题外话,您经历过应试教育吧,经历过题海战术吧?为什么班上四五十号人,做同样的题,最后考出来的成绩不一样呢?
学霸考分高不见得他们非常聪明,但是学霸基本都有个共同点,他们非常善于总结。对于成千上百道题目,他们不是死记硬背,
而是总结规律,归纳"题型",进而举一反三。
 
上面说到了一个重要词汇,“题型”,所谓“题型”就是很多题目都可以用一个基本的方法来解决。多数人都知道设计模式那本经典名著,
作者是所谓的“四人帮”,这四个人就是程序员里面的学霸,他们经历了无数的项目之后,发现很多项目中会遇到一些类似的问题,
然后他们对这些类似的问题进行反复研究推敲,最终找到了一些理想的解决办法,用这些方法来解决问题的好处是,可以使得软件更容易扩展和维护。
他们将这些解决办法进行了总结,起了一个高大上的名字就叫“设计模式”。其实我觉得叫“惯用法”更好理解,只不过显得不够学术。
 
为什么要学习“设计模式”呢?
我觉得主要有两个作用:
一个作用是实际应用,也就是在具体项目中遇到了类似的问题,直接套题型。当然说的简单,做到难。
实际工作中往往不是一开始就能看出需要用哪种模式的。随着需求的变更,代码会不断的迭代重构,慢慢的你可能发现事情在向你熟悉的某个模式靠近,
这时候就需要考虑一下是不是可以使用这个模式来解决问题。如果确定了能用这个模式解决,就将现有代码按照既有模式进行重构,
相应的类,变量等名字最好也一起重构,让别人一看就知道你是特意按照这个模式来设计的。
要做到这一点的前提当然是,你脑子里面要装着这些模式。
 
另一个作用是便于交流。首先我们说下其他两个类似的东西“数据结构”和“算法”,这两个东西其实也可以认为是总结性的东西,
大师们将常用的数据组织方法归纳出来形成“数据结构”,将常见问题的各种解法总结出来形成“算法”。他们三者还有一个共同点就是,
和具体的编程语言无关。“数据结构”,“算法"和“设计模式”都可以用任意一种编程语言来实现。
当我们学习了这些总结出来的东西之后,大家就能达成一个共识。比如程序员A说“这个问题我们需要用一个队列来实现”,
一个合格程序员的第一反应就是他的意思是先到的数据会被优先处理;因为假程序员B没学过数据结构,他当然就不知道人家在说什么。
同样道理,在进行方案设计讨论的时候,如果程序员A说,这个问题是个典型的“观察者模式”,我们就用这个模式来实现吧;
学过设计模式的程序员一听便知A的意图,同时大脑中已经浮现出了“观察者模式”的UML图是什么样子的;此时假程序员B当然是一脸懵B了。
 
好了,夜深了,就先说到这里,不知道您是否对“什么是设计模式”,“为社么要学习设计模式”是否有了个基本了解。

关于"设计模式“的更多相关文章

  1. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  4. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  5. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  6. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  7. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  8. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  9. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

  10. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

随机推荐

  1. [补档]暑假集训D3总结

    考试 集训第一次考试,然而- -   总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...

  2. Javascript闭包与作用域this

    闭包与this的一般用法 关于js函数与闭包的文章想必大家都是在熟悉不过的了,作为js核心亦即最强大的功能之一,每次回过头翻出来看一看,都会有不一样的收获与理解,经典的含义无非如此而已. 1.闭包 1 ...

  3. ABP+AdminLTE+Bootstrap Table权限管理系统第十一节--bootstrap table之用户管理列表

    这张开始bootstrap table,引入项目有两种方法,一种是直接去官网下载 地址:http://bootstrap-table.wenzhixin.net.cn/ 另一种是Nuget引入. 然后 ...

  4. hdu--1077--Catching Fish

    思路:   1.枚举两点确定圆心,大于2不用考虑   2.逐个判断判断距圆心的距离小于1.00001符合题意 这个题,主要在求圆心上废了不少功夫,但是仍存在问题 #include<iostrea ...

  5. Jmeter - foreach控制器之嵌套使用

    有需求如下: 对某分类列表分别上传随机个数的附件内容 由此想到可以使用jmeter自带的foreach控制器来实现,编写代码如下: 如图:两层循环,第一层由上方beashell获取大类列表,如下: 生 ...

  6. C#多线程的用法1-简单示例

    写在前面:阅读本系列文章即表示你已经知道什么是线程等理论知识,现在正想了解如何正确的使用线程进行编程工作. /// <summary> /// 单线程工作示例 /// </summa ...

  7. iOS Notification – 远程通知

    本文讲解iOS的远程通知的基本使用,主要包括远程通知的类型,处理远程通知的场景,以及远程通知相关证书的配置等等. 一.APNs简介 APNs是苹果公司提供的远程通知的服务器,当App处于后台或者没有运 ...

  8. css实现未知高度水平垂直居中

    页面设计中,经常需要实现元素的水平垂直居中,css实现的方法有很多(列如: margin: auto.position定位.css表达式calc().使用css预处理.table等都可以实现水平居中) ...

  9. 一个基于JRTPLIB的轻量级RTSP客户端——myRTSPClient详解

    myRTSPClient是一个轻量级的RTSP客户端C++函数库. 支持多平台,支持H264,H265,MPA等音视频传输. 免费开源,接口易用,配套教程与代码解析(本博客). 适合RTSP入门学习. ...

  10. 复习hiernate

     Configuration Configuration 类负责管理 Hibernate 的配置信息 包括如下内容:1,Hibernate运行的底层信息:数据库的URL.用户名.密码.JDBC驱动类, ...