写点什么

架构师训练营第 1 期 - 第 3 周 - 学习总结

用户头像
wgl
关注
发布于: 2020 年 10 月 05 日
架构师训练营第 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

-- 单例模式


发布于: 2020 年 10 月 05 日阅读数: 37
用户头像

wgl

关注

正走在系统架构设计师路上的程序员。 2017.12.07 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第 3 周 - 学习总结