架构师训练营第三周总结 - 设计模式的应用

发布于: 2020 年 06 月 24 日

设计目的

软件的设计目的往往都是要达到高内聚、低耦合。

这是所有人的共识,因为这样的系统更容易扩展、更强壮、可移植、更简单。

设计原则

设计原则是一种软件规范,遵守这种规范可以让我们的软件达到高内聚、低耦合的设计目的。

设计模式

设计模式就是手段了,要满足软件规范,我们的系统应该怎么设计,而设计模式就是用来解决一类问题进而提出来的。

这篇总结不细讲设计模式,因为设计模式应该大家都有学习,但一定都在苦恼什么时候应该应用设计模式。

设计模式的应用

学了设计模式不够,还得学会如何应用,在什么场景应用,以及如何使用多种设计模式组合来设计复杂的功能。

实际上我们在使用的框架或者jdk源码中都有使用设计模式,他们的应用都是我们可以学习的点。

比如jdk的排序,这是一个比较经典的模版方法模式和策略模式的组合应用:

public static <T> void sort(T[] a, int fromIndex, int toIndex,
Comparator<? super T> c) {
if (c == null) {
sort(a, fromIndex, toIndex);
} else {
rangeCheck(a.length, fromIndex, toIndex);
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, fromIndex, toIndex, c);
else
TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0);
}
}

排序的算法jdk是固定的,但是每个人的排序要求却都是不一样的:

  • 有的人需要进行正序排序;

  • 有的人需要倒序排序

  • 这两种还是个简单需求,假设还有更复杂的,用户要排序的是一个实体,实体里有价格、距离两个字断,现在排序是想按价格高低排序,价格一样按距离从近到远排序。

所以我们可以看到,这种排序要求是千变万化的,jdk无法对这种情况进行一一封装,但是除了这个地方的区别,其他地方的算法实际上都是一样的。那么只要将这个比较的过程抽象成一个接口,并让用户自己来实现这个接口,这样就形成了一个模版方法模式,而这个接口使用的就是策略模式,不同的排序策略就是不同的排序算法。

看到这个例子我们自然而然的就应该在工作中遇到类似的情况时,思考一下是不是可以应用这样的设计模式,应用了以后是不是能为我们的系统带来好处。

如果能满足以上两个条件,那就毫不犹豫的使用吧。

其实设计模式有些时候甚至不仅仅是存在于软件系统中,连我们的生活中也经常遇到。

比如我们使用的插座,插座上有两孔的,三孔的,这其实就是接口,是 一种抽象,所有厂家都根据自己的情况选择使用哪种插头实现,至于自己电器内部的系统怎么进行充电管理就是内部系统自己的事情。

但是有些国家的插头规范又跟我们国家的不一样,我们出国可能需要买一个转接口,那这就是一种适配器模式。

学习设计模式就应该学以致用,要想使用设计模式我们就需要合理的对我们的系统进行抽象,抽象能力尤其重要,而架构设计实际上也就是抽象设计。只要抽象设计的好,这个系统就会更好用。

发布于: 2020 年 06 月 24 日 阅读数: 4
用户头像

Cloud.

关注

还未添加个人签名 2020.05.14 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第三周总结-设计模式的应用