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

    属性就是属于一个对象的数据或者函数,我们可以通过句点(.)来访问属性,同时 Python 还支持在运作中添加和修改属性. 我们先来看看类里面的普通字段: class Test(object): nam ...

  2. NYOJ--95--multiset--众数问题

    /* Name: NYOJ--95--众数问题 Date: 20/04/17 16:02 Description: multiset水过 */ #include<set> #include ...

  3. macOS Sierra 10.12.6 安装u盘制作

    一.准备工作: 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据) 从这里下载苹果官方 OS X Yosemite 正式版的安装程序 (可选 AppS ...

  4. angular学习(三)-- $scope

    1.3 视图数据模型:$scope $scope 是用来视图和数据之间的胶水.粘合剂 视图和控制器之间的数据桥梁 用于在视图和控制器之间传递数据 用来暴露数据模型(数据.行为) 监视模型数据的变化,做 ...

  5. Python获取区域面积

    import cv2 import numpy as np def get_leave_areas(image): img = cv2.imread(image) GrayImage = cv2.cv ...

  6. 统计s="hello alex alex hello haiyan cc haiyan com"中每个单词的个数

    这个题可以有好几种解题方法. 一.索引值获取 s="hello alex alex hello haiyan cc haiyan com" l=s.split() dic={} f ...

  7. 设计模式之桥接模式(Bridge模式)

    我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟 ...

  8. 关于Thread类的简单使用

    线程:线程也被称为轻量级进程,进程和线程都提供一个执行环境,但创建一个新的线程比创建一个新的进程资源要少得多 线程存在进程里,也就是说一个进程至少包括一个线程 线程共享进程的资源,包括内存和打开的文件 ...

  9. windows 资源监视器

    windows的资源监视器有很强大的资源监视能力 win+r输入resmon.exe即可打开

  10. 【Ubuntu 16】 SSH免密码登录

    免密码登录时两个机器的普通用户名都要相同,这里都是dream361 ,主机名可以不同,这里的主机名都是ubuntu 1.目前有两台机器master 和 slave 在这两台机器上都安装并启动ssh服务 ...