课程亮点
- 市面罕见的设计模式全方面多角度解析课程
- 收获多达 30 种设计模式,丰富技术高度
- 收获设计思路的 7 大原则,提升技术认知
- 基于 Java 语言、通俗易懂的课程示例代码
- 收获读懂 UML 类关系图的能力
- 类图、思维导图、趣图全覆盖辅助理解
课程介绍
对设计模式的掌握,是每个程序从业者必备的技能。毕竟设计模式在编程的时候,几乎每时每刻都会遇到、用到。设计模式,是无数工程师在实际项目中不断踩坑爬坑总结出的经验教训,使用设计模式可以让自己的代码变得更加可维护和易于拓展,避免绕弯路,从而高效解决问题。
也许有人认为设计模式玄之又玄,但这种观点其实是代码量不够,或是编程水平处于比较初级的表现。只有学习设计模式,才可以合理组织代码、解耦、最终真正达到对修改封闭对扩展开放的效果。学习,重要的是学习方法与思路,其次才是具体的技术。只有掌握设计模式,才能以不变应万变。
尤其当你在面试中,因为不懂设计模式,而被问得灰头土脸时;当你和周围同事争讨技术实现方案,却被对方抛来的设计模式,怼得无力还击时;当你觉得自己的开发工作,只有 CRUD(增删改查),无法突破自己的技术瓶颈时;当你看到别人写的代码,无论是从现在的调用,还是从将来的扩展,都完美到无可挑剔时。这个时候,说明你该创造条件去好好学习并使用一下设计模式了。
趁早学习设计模式对以后的编程进阶很有帮助。良好的设计模式掌握能力,一是能够帮助你顺利通过面试,找到更好的工作;二是能够帮你更好地进阶架构师、技术布道者,对那些喜欢钻研技术的开发人员来说是很有益的。
设计模式如此重要,但目前市面上现有的设计模式课程都存在以下痛点:
- 学习曲线高,理解难度大,读者经常被过于 “专业化” 的名词给搞晕;
- 设计模式介绍不够全面,甚至有些还是错误的,以讹传讹,容易给读者造成误导;
- 示例过于简单,让读者感觉好像 “看懂了”,但还是不能把所学的内容应用到工作中。
为了解决这些学习问题,帮助大家更好地学习设计模式,本期专栏精心设计课程结构,力图做到真正的通俗易懂。在接下来的课程中,课程会先从设计模式的几大原则讲起,“知其然还要知其所以然”,悉数讲解市面上常见的近 30 种设计模式,通过类图讲解、代码示例、应用场景、优缺点说明等通俗易懂的文字帮助大家更好地理解这些设计模式,并从中总结出设计模式的使用、注意事项等,最终篇会对课程进行系统总结、实践总结,帮助大家的更好地温故而知新。
每节设计模式的内容结构精简明了,大致内容结构组成如下:
- 白话讲解设计模式
- 类关系图及说明
- 代码实现示例
- 优缺点分析
- 适用场景归纳
- 使用实例
- 总结和源码下载
讲师王磊,某大厂架构师,资深面试官,阿里云社区认证专家,十余年编程从业经验,曾就职于 360,有着丰富的大型系统设计、开发和调优的经验,在不断探索和学习的过程中,积累了宝贵的编程与面试经验。
讲师晁州,现某互联网公司 Java 高级开发工程师,曾就职于 TCL 集团、东岭集团,五年以上编程从业经验,擅长 Java、Node、Vue 等技术,有着丰富的系统设计、前后端开发经验。
学习设计模式更多地还能帮助梳理解决问题的思路。学习设计模式中蕴藏的丰富的设计理念,取其精髓,取长补短,将这些设计不断应用于现实的系统设计之中,更有助于设计出符合设计美学、高内聚低耦合的功能模块。
俗话说:取乎其上,得乎其中,取乎其中,得乎其下,取乎其下,则无所得以。对于程序开发亦是如此,只有努力学习前人总结的经典设计模式,才能把这种经典的设计模式,应用到平日的开发中去,这样你才能在程序开发这条道路上,不断精进,学有所成。
专栏模块
本期专栏共 34 讲,分为 4 大模块:
设计原则模块
设计七大原则包括:开闭原则、单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、合成复用原则等。只有对这些原则有所了解,才能写出让人惊叹的程序。
创建型设计模式
创建型设计模式关注的是对象的创建,同时隐藏创建逻辑,包含的模式有:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型设计模式
结构型设计模式关注的是类和对象之间的组合,包含的模式有:适配器模式、过滤器模式、装饰模式、享元模式、代理模式、外观模式、组合模式、桥接模式。
行为型设计模式
行为型设计模式关注的是对象之间的通信,包含的模式有:责任链模式、命令模式、中介者模式、观察者模式、状态模式、策略模式、模板模式、空对象模式、备忘录模式、迭代器模式、解释器模式、访问者模式。
J2EE 模式
J2EE 模式,帮你打通除了常见的 23 种设计模式以外的其他设计模式,它包含:MVC 模式、业务代表模式、传输对象模式、数据访问对象模式、前端控制器模式、拦截过滤器模式、服务定位器模式。
- 初、中、高级程序员
- 准备面试的程序员
- 学生和自学程序开发的准程序员
- 本专栏为图文形式内容服务,共计 35 小节,上线时间为 2019 年 10 月 15 日,预计 2020 年 1 月 20 日更新完成;
- 本专栏更新时间为每周 2、4 更新 1 篇(法定节假日顺延),形式为图文;
- 订阅成功后,用户即可通过慕课网 PC 端、App 端、WAP 端享有永久阅读的权限;
- 慕课专栏为虚拟内容服务,订阅成功后概不退款;
- 在专栏阅读过程中,如有任何问题,请邮件联系 kf@imooc.com;
- 慕课专栏版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任。
向往那片天空
厉害了
精慕门5209033
感觉单例模式才是最难的,比如应该讲一下枚举实现单例。再讨论一下序列化如何实现单例。
讲师回答 / 集市养猫者
用jad反编译一下,你就知道枚举如何实现单例的了,枚举本质是就是实现了Enum接口的一个类(在枚举里没有定义抽象方法的时候),然后它将所有的值都在静态代码块里进行了初始化。所以枚举的单例是饿汉式,至于枚举如何防止序列华破坏,你可以去看看readObject这个方法,你会发现枚举单独处理了。至于防止反射攻击则更简单,newInstance这个方法里,直接判断如果类型是枚举,就会抛出异常
天天就是学
学习了,学习了,谢谢老师。感觉是一直这么用,并不知道这些是设计原则。比方说父类作为方法参数,父类作为方法返回值,增加功能在子类中拓展等等。但还是并不知道是设计原则。