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

一、前言

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

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

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

二、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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值