架构师训练营第 1 期 - 第 3 周 - 学习总结
3.1 设计模式的定义
-- 每一种模式都描述了一种问题的通用解决方案。
-- 设计模式是一种可重复使用的解决方案。
-- 一个设计模式的 4 个部分:
-- 模式的名称
-- 待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文);
-- 解决方案 - 描述了组成设计的元素(类和对象)、它们的关系、职责以及合作。但这种解决方案是抽象的,它不代表具体的实现。
-- 结论 - 运用这种解决方案带来的利和弊。主要是指它对系统的弹性、扩展性和可移植性的影响。
-- 分类:
-- 功能:创建型模式(Creational Patterns):对类的实例化过程的抽象。
结构型模式 (Structural patterns) : 将类或者对象结合在一起形成更大的结构。
行为型模式 (Behavioral patterns): 对在不同对象之间划分责任和算法的抽象化。
-- 方式:类模式 -- 以继承的方式实现模式,静态的。
对象模式 -- 以组合的方式实现模式,动态的。
3.2 单例模式(Singleton)
一个类只产生一个实例。使用 Singleton 有 2 个原因:
-- 因数只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗;-- 性能需求
-- 当多个用户使用这个实例的时候,便于进行统一控制(比如 打印机对象); -- 功能需求
-- 单例中的成员变量是多线程重用的,可能会产生意想不到的结果,因此尽量将单例设计为无状态对象(只提供服务,不保存状态);
适配器模式(Adapter)
-- JDBC Driver 对具体数据库的适配器
-- JDBC-ODBC Bridge 是将 Windows ODBC 适配到 JDBC 接口中
3.3 JUnit 中的设计模式
模板方法模型 Template Method(行为型模式,交互及职责分配)
--扩展功能的最基本模式之一,即可以表示类模式,也可以表示对象模式。
它是通过“继承”的方法实现扩展。
-- 基类负责算法的轮廓和骨架。子类负责算法的具体实现。
继承 vs. 组合 -- 基于‘’继承“的模板方法比”组合“更容易实现。
模板方法的形式:
抽象方法
• protected abstract void step1();
• 强制子类实现该步骤。
具体方法
• protected void doSomething() { … }
• 子类不需要覆盖,但也可以覆盖之。
• 如想明确告诉子类“不要覆盖它”,最好标明:final
钩子方法
• protected void setUp() { }
• 空的实现(缺省适配器模式)
• 子类可选择性地覆盖之,以便在特定的时机做些事。
策略模式 (Strategy)--- 功能扩展,对象模式,通过“组合”的方法实现扩展。
什么时候选择 策略模式?
系统需要在多种算法中选择一种。
重构系统时将条件语句转换成对于策略的多态性调用。
与模板方法相比,策略模式的优点:
-- 将使用策略的人与策略的具体实现分离
-- 策略对象可以自由组合
策略模式可能存在的问题:
--仅仅封装了“算法的具体实现”,方便添加和替换算法,但是并不关心何时使用何种算法,必须由客户端来决定。
装饰器模式 (Decorator)-- 也被笼统地称为“包装器”(Wrapper)
-- 结构型模式 (只是对象模式)
--在不改变对客户端的接口的前提下(对客户端透时),扩展现有对象的功能。
--装饰器与适配器的区别:适配器是转换成另一个接口,而装饰器是保持接口不变。
装饰器的优缺点:
装饰器:保持对象的功能不变,扩展其外围的功能。
模板方法和策略模式:保持算法的框架不变,扩展其内部的实现。
装饰器与继承相比:
同:都可以用来扩展对象的功能。
异:装饰器是动态的,继承是静态的。
装饰器可以任意组合,但也使装饰器更复杂,有可能会组合出荒谬的结果。
装饰器的应用:
Java Servlet 中的应用:
HttpServletRequest / HttpServletRequestWrapper
HttpServletResponse / HttpServletResponseWrapper
同步化的装饰器:
Collections.synchronizedList(list)取代原先的 Vector、Hashtable 等同步类。
Java I/O 类库简介:
-- 核心 - 流,即数据的有序排列,将数据从源送达目的地。
-- 流的种类:
-- InputStream、OutStream - 代表 byte 流 (八位字节流)
-- Reader、Writer - 代表 char 流 (Unicode 字符流)
-- 流的对称性:
-- 输入-输出对称
-- Byte - Char 对称
Spring 中的设计模式:
-- 依赖注入 DI 和 控制反转 IoC
-- 单例模式
版权声明: 本文为 InfoQ 作者【wgl】的原创文章。
原文链接:【http://xie.infoq.cn/article/40fe4ab6665d321012bf8a788】。未经作者许可,禁止转载。
评论