写点什么

架构师训练营 week3 学习总结

用户头像
花果山
关注
发布于: 2020 年 11 月 08 日

什么是设计模式?

• 每一种模式都描述了一种问题的通用解决方案。这种问题在我们的环境中,不停地出现。

• 设计模式是一种可重复使用的解决方案。

一个设计模式的四个部分:

• 模式的名称 - 由少量的字组成的名称,有助于我们表达我们的设计。

• 待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文)。

• 解决方案 - 描述了组成设计的元素(类和对象)、它们的关系、职责以及合作。但这种解决方案是抽象的,它不代表具体的实现。

• 结论 - 运用这种方案所带来的利和弊。主要是指它对系统的弹性、扩展性、和可移植性的影响。


设计模式的分类

从功能分

• 创建模式(Creational Patterns)

Ø 对类的实例化过程的抽象。

• 结构模式(Structural Patterns)

Ø 将类或者对象结合在一起形成更大的结构。

• 行为模式(Behavioral Patterns)

Ø 对在不同的对象之间划分责任和算法的抽象化。

从方式分

• 类模式

Ø 以继承的方式实现模式,静态的。

• 对象模式

Ø 以组合的方式实现模式,动态的。


单例模式

public class Singleton1 {

    private Singleton1() {

    }

    private static Singleton1 instance = new Singleton1();

    public static Singleton1 getInstance() {

        return instance;

    }

}


适配器模式

适配器的作用

系统需要使用现有的类,而这个类的接口与我们所需要的不同

• 例如:我们需要对 List 进行排序,但是我们需要一个 Sortable 接口,原有的 List 接口不能

满足要求。

适配器的应用

JDBC Driver

• 是对具体数据库的适配器

• 例如,将 Oracle 适配到 JDBC 中

JDBC-ODBC Bridge

• 是将 Windows ODBC 适配到 JDBC 接口中


模板方法模式

模板方法模式是扩展功能的最基本模式之一

• 它是一种“类的行为模式”

它是通过“继承”的方法来实现扩展

• 基类负责算法的轮廓和骨架

• 子类负责算法的具体实现

组合 vs. 继承

• 基于“继承”的模板方法比“组合”更容易实现

• 在很多情况下,可以适当使用这种模式。

模板方法的形式

抽象方法

• protected abstract void step1();

• 强制子类实现该步骤。

具体方法

• protected void doSomething() { … }

• 子类不需要覆盖,但也可以覆盖之。

• 如想明确告诉子类“不要覆盖它”,最好标明:final

钩子方法

• protected void setUp() { }

• 空的实现(缺省适配器模式)

• 子类可选择性地覆盖之,以便在特定的时机做些事。


策略模式

策略模式是扩展功能的另一种最基本的模式

• 它是一种“对象的行为模式”

它是通过“组合”的方法来实现扩展

什么时候使用策略模式?

系统需要在多种算法中选择一种

重构系统时,

• 将条件语句转换成对于策略的多态性调用

策略模式的优点(对比模板方法)

• 将使用策略的人与策略的具体实现分离

• 策略对象可以自由组合

策略模式可能存在的问题:

• 策略模式仅仅封装了“算法的具体实现”,方便添加和替换算法。但它并不关心何时使用何

种算法,这个必须由客户端来决定。


组合模式

• 是一种“对象的结构模式”

组合模式的应用

文件系统

AWT 控件


装饰器模式

• 是一种“对象的结构模式”

装饰器的作用

• 在不改变对客户端的接口的前提下(对客户端透明)

• 扩展现有对象的功能

• 思考 PerformanceTests 的客户端是指谁?

装饰器模式也被笼统地称为“包装器”(Wrapper)

• 适配器也被称作“包装器”,区别在于适配器是转换成另一个接口,而装饰器是保持接口不变。

• 包装器形成一条“链”。

装饰器的优缺点

装饰器和模板方法、策略模式的比较

• 装饰器保持对象的功能不变,扩展其外围的功能

• 模板方法和策略模式则保持算法的框架不变,而扩展其内部的实现

装饰器和继承的比较

• 都可以用来扩展对象的功能

• 但装饰器是动态的,继承是静态的

• 装饰器可以任意组合

Ø 但这也使装饰器更复杂,有可能会组合出荒谬的结果

装饰器的应用

Java Servlet 中的应用

• HttpServletRequest/HttpServletRequestWrapper

• HttpServletResponse/HttpServletResponseWrapper

同步化装饰器

• Collections. synchronizedList(list)

• 取代原先的 Vector、Hashtable 等同步类。

Java I/O 类库简介

• 核心 - 流,即数据的有序排列,将数据从源送达目的地。

• 流的种类

Ø InputStream、OutputStream - 代表 byte 流(八位字节流)

Ø Reader、Writer - 代表 char 流(Unicode 字符流)

• 流的对称性

Ø 输入-输出对称

Ø Byte-Char 对称

Ø 因此我们只要学习任意一种流,就可以基本了解其它所有的流。


发布于: 2020 年 11 月 08 日阅读数: 30
用户头像

花果山

关注

还未添加个人签名 2019.05.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 week3 学习总结