架构师训练营 week03 总结
1. 面向对象设计模式
1.1 设计模式的作用
设计模式提供了一个标准的术语系统,且具体到特定的情景。提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
1.2 设计模式的定义
定义:设计模式是一种可重复的解决方案。每一种设计模式都描述了一种问题的最佳解决方案。
组成部分:
模式名称
待解决问题 - 描述何时使用某种设计模式以及运用该模式的环境;
解决方案 - 描述组成设计元素、元素的关系、职责及合作,为抽象不代表具体实现;
结论 - 运用该方案的利弊,主要是对弹性、可扩展性、可移植性的影响。
1.3 设计模式的分类
两种分类方式
按功能分包含:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns);
按方式分包含:类模式、对象模式;
2. 设计模式应用案例
2.1 简单工厂模式
解决排序问题
2.2 单例模式
保证产生单一实例,性能上减少实例频繁创建和销毁带来的资源消耗;功能需求上多用户使用时,便于统一管理;
两种写法;
说明:
一定有私有构造函数,保证类实例只能通过getInstance获得
synchronized关键字的使用;
单例模式中成员变量为多线程重用,尽量设计为无状态对象,只提供服务,不保存状态;
2.3 适配器模式
作用:要使用现有类,单该类的接口与需要的不相同时使用;
案例:JDBC Driver 、 JDBC-ODBC bridge
2.4 模板方法模式
扩展功能的基本模式之一,是类的行为模式;
通过“集成”方法来进行扩展:基类负责算法轮廓和骨架,子类负责算法的具体实现;
模板方法的形式:
抽象方法 :定义抽象方法,强制子类实现;
具体方法:子类不需要覆盖,也可以覆盖;明确不需要覆盖的方法,使用final修饰;
钩子方法:空的方法实现,子类选择性覆盖;
使用时机:
将一个大方法打破,变为多个可扩展的步骤;
将if/else或switch 语句改为多态性;
产生的问题:
抽象算法与具体实现步骤耦合,不能独立演化;
类的数量增加、层次加深;
2.5 策略模式
对象行为模式,扩展功能使用;通过“组合”的方法实现;
使用时机:
需要在多种算法中选择一种时;
条件语句转为对策略的多态调用;
优点:
将使用策略的对象与实现分离;
策略对象可以自己有组合
2.6 组合模式
部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
包含角色
抽象构件(Component)
叶子构件(Leaf)
Composite(容器构件)
2.7 装饰器模式
对象结构模式,在不改变对客户端的接口情况下,扩展现有对象的功能;
3 Spring中的设计模式
依赖注入与控制反转
单例模式
MVC模式
小结
本周首先介绍了面向对象设计模式在软件开发中的位置,设计模式的定义、作用和分类,再针对具体代码和软件框架介绍了简单工厂模式、单例模式、适配器模式、模板方法、策略模式、组合模式、装饰器模式、组合模式、策略模式,对比的模式优缺点以及使用时机。通过讲解JUnit测试框架介绍了设计模式的综合运用,最后讲解了Spring框架中依赖注入与控制反转、单例模式、MVC模式的具体实现。
评论