前言
==
当我第一眼看见《大话设计模式》这本书的时候,感觉很神奇,这本书的封面就很吸引人的注意。书的封面有一种漫画的意味。所以第一眼就对它产生了好感,对书里面的内容也产生了很大的好奇。抱着极大的好奇心和对它浓厚的兴趣,开始了《大话设计模式》的学习。现在已经学习完第一遍了。果然这本书没有让我失望,很喜欢这本书里面的对话方式。同时也让我对各种设计模式的学习也产生了很大的欲望,不断的探索中。
叙述
==
一、设计模式是什么
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,其中关键要素是 模式名称、问题、解决方案和效果。
**模式名称(Pattern Name)**通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的(GoF设计模式中没有一个模式用人名命名,微笑);
**问题(Problem)**描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;
**解决方案(Solution)**描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;
**效果(Consequences)**描述了模式的优缺点以及在使用模式时应权衡的问题。
二、设计模式的分类
1)根据它们的用途或者是目的分类,设计模式可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种。
创建型模式主要用于描述如何创建对象, 结构型模式主要用于描述如何实现类或对象的组合, 行为型模式主要用于描述类或对象怎样交互以及怎样分配职责。
类型 | 模式名称 | 模式介绍 |
创建型模式 Creational Pattern | 单例模式 Singleton Pattern | 保证一个类仅有一个实例,并提供一个访问它的全局访问点 |
工厂方法模式 Factory Method Pattern | 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 | |
抽象工厂模式 Abstract Factory Pattern | 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 | |
原型模式 Prototype Pattern | 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 | |
建造者模式 Builder Pattern | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 | |
结构型模式 Structural Pattern | 适配器模式 Adapter Pattern | 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 |
桥接模式 Bridge Pattern | 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 | |
组合模式 Composite Pattern | 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 | |
装饰模式 Decorator Pattern | 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 | |
外观模式 Façade Pattern | 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用。 | |
享元模式 Flyweight Pattern | 运用共享技术有效地支持大量细粒度的对象。 | |
代理模式 Proxy Pattern | 为其他对象提供一种代理以控制对这个对象的访问。 | |
行为型模式 Behavioral Pattern | 职责链模式 Chain of Responsibility Pattern | 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 |
命令模式 Command Pattern | 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 | |
解释器模式 Interpreter Pattern | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 | |
迭代器模式 Iterator Pattern | 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 | |
中介者模式 Mediator Pattern | 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 | |
备忘录模式 Memento Pattern | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 | |
观察者模式 Observer Pattern | 定义了一种一对多的依赖关系,让对个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 | |
状态模式 State Pattern | 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 | |
策略模式 Strategy Pattern | 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 | |
模板方法模式 Template Method Pattern | 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 | |
访问者模式 Visitor Pattern | 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 |
2)根据某个模式主要是用于处理类之间的关系还是对象之间的关系,设计模式还可以分为类模式和对象模式。
三、设计模式的作用是什么
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!**