第三周,在学习完成设计原则之后,开始了设计模式的学习,设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式的精髓是对多态的灵活运用。
“四巨头”那本书里,一共讲述了23中设计模式,总体上分为创建模式、结构模式、行为模式三大类。
老师在课程中,主要讲述了工厂模式、适配器、单例、模板、策略、模板与策略结合、组合、装饰器 这些模式
主要结合Junit,Spring,SpringMVC,Servlet等开源案例讲解了设计模式在这些案例中的应用。
重构是软件开发中重要的一部分,软件设计大师 Martin Fowler 是这样定义重构的:“重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。”实际上,当讲到重构的时候,很多书籍都会引用这个定义。这个定义中有一个值得强调的点:“重构不改变外部的可见行为”。我们可以把重构理解为,在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的不足,提高代码质量。
下面主要描述一下老师介绍的一些设计模式的概念和类图
工厂模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
适配器模式:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
单例模式:确保一个类只有一个实例,并提供全局访问点。
模板模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。
关于重构,王争老师总结了20条好落地的规范(https://time.geekbang.org/column/article/188882)