文章目录

  • 1.前言
  • 2.设计模式划分
    • 2.1 根据模式的目的划分
      • 2.1.1 创建型模式
      • 2.1.2 结构型模式
      • 2.1.3 行为型模式
    • 2.2 根据模式的作用划分
      • 2.2.1 类模式
      • 2.2.2 对象模式
  • 3.总结

1.前言

    博主经过6年的代码洗礼,慢慢意识到代码中使用设计模式的重要性。然而,在我遇到的程序员大军中,我大概归类了以下几类人:

  • A类:完全没有考虑设计模式,代码完全ctrl C+ctrl V,一般是大学生居中;
  • B类:听过设计模式,但是觉得深奥,不考虑入门,工作一两年的初级工程师;
  • C类:合理性使用设计模式,代码维护度和扩展度很高,这是我所追求的方向

    因此,博主计划做一个设计模式的系列帖子,记录学习笔记,力求深入浅出设计模式。

    如果你有以下几种想法(一个有追求的程序员),我非常建议学习设计模式:

  • 架构设计时,如何实现高内聚低耦合?
  • 面对产品人员提出的需求变更,我如何尽量以最少的代码改动完成任务,并且不应该旧业务?
  • 如何在团队协作中沉淀出可复用组件,如何解耦?

    这里先推荐几本博主阅读的设计模式书籍:

  • 大话设计模式(小白推荐)
  • Head First 设计模式(中文版)(小白推荐)
  • 设计模式之禅(第2版)(博主极度推荐,快速看完上面小白入门可以看这个)

        请记住,设计模式并不是凭空出现,而是程序员在不断地开发以及优化功能的过程中总结出的宝贵代码设计精华,用来应对各种业务需求。

2.设计模式划分

    目前有23种设计模式。设计模式有两种分类方法,一种是根据模式的目的来划分,另一种根据模式的作用范围来划分。

2.1 根据模式的目的划分

    根据模式是用来完成什么样的工作,可以划分为:

  • 创建型模式
  • 结构型模式
  • 行为型模式

2.1.1 创建型模式

创建型模式用来描述“怎么创建对象,对象从哪里获取”。主要是为了将对象的创建与使用分离。包括5大模式:

  • 单例模式
  • 工厂方法模式
  • 抽象工厂模式
  • 原型模式
  • 建造者模式

请记住:着重于对象如何创建,从哪里创建

2.1.2 结构型模式

结构型模式用来描述“处理类和对象的组合,将类和对象按照某种布局完成更大的结构”。包括7大模式:

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰模式
  • 外观模式
  • 享元模式
  • 代理模式

请记住:着重于对象与对象之间的一种关系、布局、结构

2.1.3 行为型模式

行为型模式用于描述“类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责”。包括11种:

  • 模板方法模式
  • 解释器模式
  • 策略模式
  • 命令模式
  • 责任链模式
  • 状态模式
  • 观察者模式
  • 中介者模式
  • 迭代器模式
  • 访问者模式
  • 备忘录模式

请记住:着重于对象为了完成某个行为而协作的过程,重点在于行为

2.2 根据模式的作用划分

    根据模式用于类上还是对象上来分,这种方式可分为:

  • 类模式
  • 对象模式

2.2.1 类模式

用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时便确定下来了。

  • 工厂方法模式
  • 适配器模式(类)
  • 模板方法模式
  • 解释器模式

2.2.2 对象模式

用户处理对象之间关系的,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。除了上面四个模式之外,其他模式都是属于对象模式(适配器模式比较特别)。

综合总结为下图:

当然,请记住,不要为了使用设计模式而去使用模式(这种叫做过度设计)。

3.总结

本篇没有太多的技术难点,主要是抛砖引玉,引入设计模式的概念,以及设计模式的划分。让大家有个初步的概念。请继续关注后面的博文,博主会在博文中讲解实际项目中是如何使用的。

在做小项目的时候,可以不考虑设计模式,因为有时候引入设计模式可能会额外添加更多的代码,不要让代码为设计模式服务,这是本末倒置的。

在做大项目(多人协作项目,逐步迭代的项目)的时候,博主极度建议适度考虑设计模式,因为涉及到后期的产品迭代开发,往往有意向不到的需求变更。当一个代码随着需求的变更而不用修改太多旧逻辑代码的时候,我觉得这就是一个成功的代码。

最后,博主总结几点自己的经验:

  • 在涉及到创建对象的过程,可以考虑创建型设计模式
  • 在涉及对象与对象之间的关系时,可以考虑结构型设计模式
  • 在考虑如何增强对象行为或者对象无法单独完成某个任务时,可以考虑行为型设计模式。

下面附上脑图:

深入浅出设计模式① —— 设计模式之路相关推荐

  1. 图解设计模式-设计模式七大原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让 **程序(软件)**具有更好的 ...

  2. 设计模式 ----- 设计模式总结

    设计模式 -– 设计模式总结 设计模式系列源码: https://github.com/liloqian/DesiginModeDemo 1.什么是设计模式 模式是指在某情形下,针对某问题的某种解决方 ...

  3. Java设计模式---设计模式概述及七大原则

    网课指路:尚硅谷Java设计模式(图解+框架源码剖析)_哔哩哔哩_bilibili 设计模式介绍         1) 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验, 模式不是代码 ...

  4. 正确的姿势学习设计模式,设计模式必知必会 --- 面试, 提升篇

    目录 引言--- 为何需要设计模式? 学习设计模式不如掌握设计原则 (根据原则慢慢重构自己的设计模式) 依赖倒置原则 开放封闭原则 面向接口编程 封装变化点(核心原则) 抽象稳定点,扩展变化点 单一职 ...

  5. JavaScript 设计模式----设计模式初识

    JavaScript 设计模式----设计模式初识 1. 从设计到模式 2. 设计模式简介 2.1 设计模式类型 2.2 创建型 2.3 结构型 2.4 行为型 3. 设计原则面试题 3.1 面试题一 ...

  6. 代码规范+设计模式落地之路

    欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好 ...

  7. [转]深入浅出Java设计模式之备忘录模式

    本文转自:http://dev.yesky.com/450/2070450.shtml 一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛 ...

  8. 代码规范 设计模式落地之路

    - 1 - 前言 与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好的应用到设计模式. 业务虽然肯定保密的,但是抛开项目,业务层面, ...

  9. Koffee设计模式学习之路(一) —— 模式学习总结思路

    这篇博客没有相关技术细节,仅作为自己对设计模式这个东西的一点感悟和以后设计模式系列博客的一个写作思路. 作为非科班出身,误打误撞进入编程的人,在上研究生期间对于程序的唯一要求就是:能用.彼时,不知道有 ...

  10. .Net 设计模式进阶之路——生成器模式[Builder]

    「本文是月更第1天文章.对我来说,这是一个挑战,虽然很早就读过设计模式,但已经还回给了书本,这次拿来无非是想挑战下自己的输出能力,加油,webmote」

最新文章

  1. gevent.hub.LoopExit: ('This operation would block forever'
  2. 结构型模式之Proxy模式
  3. sql中去掉换行符和回车符
  4. [二分][前缀和]洛谷 P1083 借教室
  5. Windows域内的时间同步
  6. 关于ARM的22个常用概念
  7. easyui tab
  8. webpack devserver配置_在webpack中使用babel
  9. 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...
  10. 二维数组初始化_0基础学习C语言第七章:数组(2)
  11. SQL Prompt快捷键整理(使用帮助)
  12. 教教大家系统之家装机大师怎么用?
  13. 追逐冠军的少年 | 算法工程师岗毕业三年总结
  14. 灵感专题—2019年优秀网页设计作品赏析#4月
  15. CSS属性vertical-align详解(CSS之五)
  16. 1006592-61-5,5-TAMRA Azide,5-TAMRA N3,5-羧基四甲基罗丹明-叠氮溶于有机溶剂(DMSO、DMF、二氯甲烷),水溶性低
  17. CraftManager for Mac(PS/sketch自动填充神器)特别版
  18. yun2win发布即时通讯云IM,做最安全的即时通讯云!
  19. python教程104-Python通过邮箱群发工资条
  20. 湛江C语言培训,湛江c语言编程学习,湛江学c语言编程报班,湛江学c语言编程自学好还是报班好...

热门文章

  1. VC++之MFC教程
  2. Qt QMake详解
  3. 男生追女生的超强数学建模分析
  4. b站黑马程序员java视频学习笔记01
  5. 程序员的需要掌握的数学知识
  6. 性能调优第一篇-SQL格式化
  7. Proteus、Keli对C51芯片实现仿真流水灯
  8. 使用SoapUI测试webservice接口详细步骤
  9. android界面设计中用的字体,APP界面设计必备!最全UI设计字体规范
  10. 北大中文核心期刊目录(2004年版)