1. 前言
相信大多数刚入门的程序员都有过这样的困惑,就是大家有没有感觉,学习没有用,也不是说没有用啊,就是我学完了,没有地方用,还有就是学的根部就不深,不牢固,很多时候无论是看视频呀,看书呀,只是看完就拉到了,根本没有自己的思考,导致过一阶段就忘了。唉,可能只有我这样吧,不过最近我痛定思痛,准备以一种新的思路继续学习。就以设计模式开始吧!!!设计模式肯定百分之99.999的程序员都学过了,但是能真正理解熟练使用的不到百分之0.001,尤其像我这种经验少的,最多算个能背出设计模式的概念,用?? 不可能,这辈子是不可能用的。本章节主要介绍一下设计模式有哪些,以及面向对象设计原则有哪些。
2. 思考
为什么学完了设计模式和没学一样?
- 首先第一点肯定是经验不够,大部分人其实做的都是简单的业务,传说中的CRUD,再加上目前互联网大部分都是以维护老项目为主了,都是在前人项目上缝缝补补,可能给你一个需求,你只需要改几行代码。这时候就会感叹空有一番武艺无处可用啊。
- 再有大多数人学习设计模式的时候都是先了解概念,然后照着人家给的代码示例敲一遍就觉得我会了,这么简单,小小设计模式可笑可笑,换了一个场景,你就开始蒙圈了,开始上if else 了。心里该想了代码和我有一个能跑就得呗,要求那么多干嘛。
3. 实践
于是乎本次我准备重新学习设计模式,这次不仅仅是简单的学习,我还会搜集各种场景,举例出哪些业务场景适合使用哪些设计模式,同时也欢迎各位大佬在评论区留言,可以是你现在工作中遇到的业务场景,也可以是你自己构思出来的,咱们大家一起想,之后针对不同设计模式在做一个总结,对比一下不同设计模式的区别,同时在根据某些特定的业务场景去对比使用哪种设计模式更好一些。来增加大家对于设计模式的认知。相信这一套下来,不能说是完全掌握吧,手拿把掐不过分吧。
废话不多说,开始!!!!!!!
4. 设计模式大纲
本节我们就先大概总结一下设计模式都有哪些,接下来章节我们我们就一一去细说各种设计模式,并针对每一章节我们也会举一到俩个相应的例子,同时我也会针对当前章节的学习给出一些实际的业务场景让小伙伴们去实现,最重要的是如果有那些小伙伴在工作中遇到了哪些业务场景适合我们目前学习的设计模式的话也可以在评论区评论,然后大家一起在评论区给出相应的案例或者是伪代码,相信这一套流程下来一定会加深各位对设计模式的理解的!有兴趣的小伙伴可以关注我哦!接下来的这段时间会以本专栏为主进行更新。带给大家一种不一样的体验
创建型模式: 单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式
结构型模式: 装饰器模式、代理模式、桥接模式、适配器模式、组合模式、外观模式、享元模式
行为型模式: 责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模版模式、访问者模式
本章节只归纳一下设计模式有哪些,但是我们要区分不同类型设计模式的含义。
创建型模式
创建型模式是处理对象创建的设计模式,根据实际情况使用合适的方式创建对象。创建型模式又分为对象创建型模式和类创建型模式,具体来说对象创建型模式把对象创建的一部分推迟到另一个对象中,而类创建型模式将它对象的创建推迟到子类中。
结构型模式
结构型模式关注的是类和对象之间的组合。结构型设计模式可以分为类结构型和对象结构型。类结构型模式关心类的组合,一般只存在继承和实现关系,通过多个类组成更大的类;对象结构型关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例对象并调用其方法。根据合成复用原则,多关联而少继承。因此大部分结构型模式是对象结构型模式
行为型模式
行为型模式主要关注的是对象之间的通信,用于解决对象之间的指责分配和协作问题。行为型模式可以分为类行为模式和对象行为模式。类行为模式通过继承机制在类间分派行为,主要是通过多态来分配父类和子类的职责。对象行为模式通过组合和聚合,在对象间分派行为,通过对象关联等方式来分配类的职责。由于组合方式比继承耦合性低,所以对象行为模式要比类行为模式具有更大的灵活性。所以大部分的行为型设计模式 都是 对象行为模式。
5. 设计模式入门必备
在学习设计模式之前我们有一个必须要知道的知识就是面向对象设计原则
5.1 开闭原则
对扩展开放,对修改关闭 在程序需要进行扩展的时候,不能去修改原有的代码,实现一个热插拔的效果
5.2 里氏替换原则
任何基类可以出现的地方,子类一定可以出现
里氏替换原则是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用。而派生类也能够在基类的基础上增加新的行为
里氏替换原则是对开闭原则的补充,实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现。所以里氏替换原则是对实现抽象化的具体步骤的规范
5.3 依赖倒转原则
针对接口编程,依赖于抽象而不依赖于具体
5.4 接口隔离原则
使用多个隔离的接口,比使用单个接口要好。
5.5 迪米特法则,又称最少知道原则
一个实体应该尽量少地与其他实体之间发生相互作用。使得系统功能模块相对独立
5.6 合成复用原则
尽量使用合成/聚合的方式,而不是使用继承
本章节就先简单的介绍到这里,如果有兴趣的同学可以点赞收藏加关注奥,同时可以在评论区留下你个人的想法,如果反馈比较多的话可以考虑拉一个群,到时候大家一起交流一下学习设计模式的心得体验。