一、前言

设计模式是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

其实早就有这样的感受了,大一面向过程编程,大二的时候开始触及项目时,发现自己写的代码很臃肿,比如连接数据库进行增删查改,我竟然把连接数据库的语句在每个需要对数据库进行操作的函数中都写了一遍,当时就觉得很愚蠢,但是不知道有什么好的规范和原则,后来才知道有个叫设计模式的东西,现在就来好好学吧。
设计模式的概念我们刚刚在上面说过了,我们学习设计模式的目标就是:

  • 高内聚低耦合:要对自己系统的模块进行分类,什么类就干什么事,不要互相扯皮。
  • 易于扩展和修改:别加个功能还得改原来的代码,千万不可牵一发而动全身,这样太烦了太累了。

二、OOP七大原则


稍微了解了OOP七大原则后,我以后会这么写代码:
1.对自己所写的类的内部进行极其具体的细分,假如一个客户信息管理类里面有连接数据库方法、数据库查询方法、展示信息图表和创建图表方法,我肯定会新建两个类,一个类就专门干一个领域的功能。(这叫单一职责原则
2.想要遵循开闭原则,实现易于扩展和修改的目标,得进行抽象化设计,把具体的多个类抽象为一个抽象类,然后这些多个具体类都是这个抽象类的子类,这样我再加具体类时就不会对原先的基类大动干戈,因为具体类和抽象类的内部业务逻辑是一样的。
3.里氏代换原则是实现开闭原则的重要方式之一,它的意思是使用父类对象的地方也能使用子类对象比如我喜欢动物,那么我一定喜欢狗。所以我们的主要手段是将父类设计为抽象类,让子类继承父类,在运行时用子类对象替换父类对象,想要扩展系统的功能只需直接添加新的子类即可,无需修改原有子类的代码,比如我喜欢动物,我一定喜欢狗,我还一定喜欢猫喜欢猪喜欢你等等。其实和我上面第2点说的意思一样。因为里氏代换原则,所以开闭原则(个人理解)。
4.依赖倒转原则也是实现开闭原则的重要方式之一,是系统抽象化的具体实现,它的意思是尽量引用层次高的抽象层类,比如txt数据转化类和excel数据转化类就同一继承高级的数据转化抽象类。以后编程的时候,看到多个具体类要本能反应地去产生一个它们的抽象类
5.接口隔离原则我觉得思想还是细分,分类,只不过这次是对接口细分,防止某些类用了自己用不到的接口。比如比如一个类中有xml数据转换方法、读取数据方法、展示图表方法,但是有些数据本身就是xml数据,那么这个xml数据转换方法就用不到,至少需要提供一个空实现,就很臃肿,于是我们使用接口隔离原则细分为非XML数据类和XML数据类,XML数据类中就不要写xml数据转换方法这个类了。
6.合成复用原则少用继承多用组合能组合的时候必须组合,绝不能用继承,尽管继承和组合都能达到联系起来的目的。比如数据库操作类继承了数据库连接类就是不佳的,我这个时候用户多了起来,想连接Oraccle数据库了,这时候就会修改数据库操作类的代码,违反了开闭原则,假如我们当时数据库操作类和数据库连接类只是组合关系就不会出现这样的情况。“Has-A”的关系应用组合或聚合,“Is-A”才用继承。就是这么个道理
7.迪米特法则其实就是低耦合。一个软件实体应当尽可能少地与其他实体发生相互作用。我们的主要处理方法就是引入中间类以降低耦合度,之前所有的联系和操作都是在中间类中处理。

OOP七大原则就讲完了,这非常重要,后面所说的设计模式其实本质上都是用具体的方法去实现和履行这些原则。

三、常见的23种设计模式教学

设计模式根据目的可分为创建型、结构型和行为型。
创建型模式主要用于创建对象
结构型模式主要用于处理类或对象的组合
行为型模式主要用于描述类或对象怎样交互和怎样分配职责

  • 创建型模式:单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者 模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)。

抓主要矛盾,我们挑出其中最重要的几个模式进行讲解:

工厂模式


在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

没有工厂模式的时候,调用者用的方法是new 类名,是能了解到类里面的业务细节的。而有工厂模式后,调用者只需要传参给工厂类即可。


但是简单工厂模式不能满足开闭原则,比如我现在想买一辆大众汽车,这时候就要在CarFactory类里面在写一个if语句,违背了开闭原则。故要引入工厂方法模式,即每一辆车有每一辆车自己的工厂,然后这些工厂指向一个抽象工厂类。



抽象工厂模式

工厂的工厂。

主工厂生产手机和路由器,
工厂分为小米工厂和华为工厂,
ProductA为手机,ProductA1为小米手机,ProductA2为华为手机;
ProductB为路由器,ProductB1为小米路由器,ProductB2为华为路由器。



建造者模式





原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。
当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

更新ing

【设计模式】快速全面通俗易懂的设计模式讲解(以大白话例子讲解)相关推荐

  1. TensorFlow 2.0 快速上手教程与手写数字识别例子讲解

    文章目录 TensorFlow 基础 自动求导机制 参数优化 TensorFlow 模型建立.训练与评估 通用模型的类结构 多层感知机手写数字识别 Keras Pipeline * TensorFlo ...

  2. java多线程详细讲解_Java多线程例子讲解

    一:知识点声明: 1.区别进程和线程:进程是静态概念,它的执行依赖线程进行. 2.进程的状态:就绪(等待cpu执行),运行,中止,阻塞(等待所需资源,进入阻塞态) 3.Java程序的main函数即是一 ...

  3. 视频教程-实用通俗易懂的设计模式-软件设计

    实用通俗易懂的设计模式 15年一线项目从业经验,长期从事大型商业项目管理. 长期主导研发金融,水利行业等,大型商业项目.深入研究项目全生命周期,参与公司产品线定位,架构设计,管理协调实施项目投标方案编 ...

  4. Java设计模式快速入门之外观模式

    3.2Java设计模式快速入门之外观模式 3.2.1概念 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向 ...

  5. 快速、深入理解设计模式的what、why、how

    工作很久,看过很多代码,看过很多源码,发现大部分人对设计模式的理解有偏差,我将从以下几个角度对设计模式进行详细介绍. 设计模式是什么 设计模式是一种思想,一种结构,一种优秀的思考模式.类比建房子的设计 ...

  6. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  7. java策略设计模式_Java中的策略设计模式

    java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...

  8. 设计模式私家笔记——概述:设计模式是银弹吗?

    什么是设计模式? 设计模式OOP(面向对象编程)语言的一些最佳编程实践.这些从大量和长期的软件开发实践和试错中积累出来的通用解决方案(设计模式),往往能够解决软件开发面临的一些通用问题. 设计模式从何 ...

  9. JAVA设计模式总结之23种设计模式(重点!!!)

    JAVA设计模式总结之23种设计模式: 一.什么是设计模式 设计模式遵循的原则有6个: 二.设计模式的三个分类 三.各分类中模式的关键点 四.概说23种设计模式 1.单例模式(Singleton) 2 ...

  10. 【设计模式】--设计原则和设计模式

    下面内容持续更新.... 一.设计模式七大原则 二.设计模式 2.1 创建型--单例模式 2.1.1 懒汉式 2.1.2 饿汉式 2.1.3 双重检验 2.1.4 静态内部类 2.1.5 枚举 2.1 ...

最新文章

  1. Windows 8部署系列PART2:部署先决条件准备
  2. 用Ghost几秒钟快速格式化120G大硬盘
  3. Silverlight学习(一) 创建Silverlight项目,构建一个简单的Silverlight Demo
  4. 有关camshift的知识点
  5. winform之窗体固定
  6. NC反弹的小demo
  7. 聚类分析与相关算法(Kmeans等)详解
  8. NoSQL分布式数据库的独家见解- Adam Fowler
  9. java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...
  10. Pseudoprime numbers POJ - 3641(快速幂+判素数)
  11. VMware竟然出了一款防火墙
  12. 数据库字段与属性的关系是什么?
  13. 画对数幅频曲线_耳机频响曲线如何看(中)--耳机和音箱对频响和失真的要求的差异...
  14. 有人认为,“中文编程”是解决中国程序员效率的秘密武器,请问它是一个“银弹”么?...
  15. 集中火力 专项击破|数据分析可视化广深线下培训火热来袭
  16. cdr多页面排版_CDR排版技巧
  17. Greenplum删除segment节点
  18. 自主导航小车实践(二)
  19. mysql dump 2013_mysqldump 错误2013 Lost connection
  20. YYLabel的几个实用小技巧

热门文章

  1. python实现ddos防护_python实现的防DDoS脚本
  2. nms网关服务器日常维护,ZXB10-NMS网管解决方案
  3. quartz 整合 postgresql 附带例子
  4. 2021-2027全球与中国专利分析服务市场现状及未来发展趋势
  5. 进程原语和线程原语是啥意思_转换中介原语
  6. 阳光长跑(阳光体育服务平台)
  7. 怎么下载正版java7_Java7中jdk的下载和安装
  8. 使用POI中XSSF 实现“合并单元格时,仅保留左上角单元格的值,而放弃其他的值“ 问题排查笔记
  9. 哪里获取计算机新闻比较好,学新闻的用什么电脑比较好
  10. 【BZOJ 4011】[HNOI2015]落忆枫音