架构培训 -03 学习总结 设计模式

发布于: 2020 年 06 月 25 日

1.什么是设计模式

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

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

一个设计模式的四部分:

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

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

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

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

1.1设计模式的分类

1.1.1按功能分

  • 创建模式 - 对类的实例化过程的抽象。

  • 结构模式 - 将类或者对象结合在一起形成更大的结构。

  • 行为模式 - 对在不同的对象之间划分责任和算法的抽象化。

1.1.2按方式分

  • 类模式 - 以继承的方式实现模式,静态的。

  • 对象模式 - 以组合的方式实现模式,动态的。

2、常见设计模式

在这次学习设计模式中,老师通过场景示例的方式引入常见的一些设计模式,从理解上有种层层递进的感受,映像深刻。

2.1简单工厂

2.1.1解决什么问题?

使client不再依赖Sorter的具体实现,对client来说符合了开闭原则(OCP).

2.1.2利弊分析

利: 对client来说符合了开闭原则(OCP)

弊: 如果需要更改Sorter,SorterFactory需要做修改,不符合OCP。(可以通过配置文件的方式进行配置具体的Sorter实现,从而让SorterFactory满足OCP。

2.2单列模式

比较简洁的实现代码(5行代码)

public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public Singleton getInstance() {
return instance;
}
}

2.2.1解决什么问题

只提供一个实例即可,解决了没有必要的资源浪费和统一控制资源的需求。

2.2.2利弊分析

利:1、只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗 --解决性能需求

2、当多个用户使用这个实例的时候,便于统一控制(比如打印机对象)--解决功能需求

2.3适配器模式(Adapter)

2.3.1解决什么问题

系统需要使用现有的类,而这个类的接口与我们所需要的不同时,使用适配器模式来解决。

2.3.2利弊分析

暂无

2.4模板模式

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

  • 它是一种“类的形式模式”

2.5策略模式

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

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

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

2.5.1应用场景

  • 系统需要在多种方式中选择一种的时候

  • 重构系统的时候--将if else条件语句转换成对于策略的多态性调用。

2.5.2优缺点

优点:(和模板模式对比)

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

  • 策略对象可以自由组合

缺点:

  • 策略模式仅仅封装了“算法具体的实现”,方便添加和替换算法。但他不关心何时使用哪种算法,这个必须由客户端决定

2.6组合模式(Composite)

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

2.7装饰器模式(Decorator)

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

2.7.1应用场景

  • 想要透明并且动态的给对象添加新的功能而不影响其他对象

  • 给对象添加的职责在未来可能会发生变化

2.7.2优缺点

优点:

  •  扩展功能强,相比继承来说更灵活。继承的话会导致子类个数增加。而装饰者模式不会出现这种情况。

  •  可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象。

  •  具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的构件子类和具体装饰类。

缺点:

  • 装饰模式会产生比使用继承关系更多的对象,更多的对象会使得查错变得困难。

用户头像

刘敏

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
架构培训 -03 学习总结 设计模式