架构师训练营第三周学习总结

用户头像
Gosling
关注
发布于: 2020 年 10 月 08 日

1.什么是设计模式

我们提到模式是指,在某种场景下针对某问题的某种解决方案。回到我们软件开发中的设计模式,就是在某个不断出现的问题场景中,解决这一类问题的通用解决方案。

每种设计模式都有名字,解决的问题,解决方案和相应的优缺点,便于开发者来识别不同的设计模式。在设计模式的约束下,我们更容易实现良好的架构设计,即满足开闭原则。

2.设计模式的分类

我们通常按照功能来划分设计模式的类目,一般会分为创建型,结构型和行为型。除了这种分类方式之外,还有一种通过模式所处理的是类还是对象来区分,分为类模式和对象模式。

3.常用的设计模式

3.1创建型

3.1.1 Singleton(单例模式)

单例模式使用的场景是要求,软件系统中整个生命周期内,保证某个类最多只有一个实例对象。目的是为了确保某些资源全局只有一份,而不是在各处都能随意创建。这就需要通过设计模式来约束开发者,不能给某些受限制的类重复创建实例对象。在众多设计模式中,单例模式也是相对比较容易理解的,实现起来也比较简单,最简单的方法只需要保证构造方法是私有的,同时在类中声明一个在自身静态的成员引用并初始化,然后提供一个公共方法返回这个引用,这样就实现了单例模式。

3.1.2 Factory(工厂模式)

工厂模式使用的场景是希望能有一个统一的对象实例提供的管理容器。上面的单例模式主要用于提供实例对象,而工厂模式也类似,也是提供对象,不过不是一种对象。使用这个设计模式的目的是让依赖方和创建方进行解耦,这样当依赖的产生了变化,我们的创建过程是不受影响的,面向抽象接口的依赖,我们只需要修改创建实例化的部分,即工厂模式的部分就可以实现开闭原则。

3.2结构型

3.2.1 Decorator(装饰器模式)

装饰器模式的使用场景是在不修改原有对象的代码基础上,对原有功能进行扩展。通过包装(装饰)原有的类实现扩展,这里就要求装饰器和被装饰的类都继承自相同的父类,这样在引用中满足面向接口抽象的变成。在装饰器中持有被装饰对象的引用,这样就可以在实现被装饰对象的基础上,使用装饰器进行扩展。

3.2.2 Composite(组合模式)

组合模式允许你讲对象组合成树形结构来表现“整体/部分”层次结构。组合能让我们的代码使用一致的行为实现功能。这种模式要求我们的类中持有一组(集合)自身抽象的引用,在结合迭代的方式,就可以实现统一的方法调用。

3.2.3 Adapter(适配器模式)

适配器模式是将一个类的接口,转换成期望的另一个接口。让原本不兼容的两者进行合作。适配器将变化的部分封装起来,屏蔽掉依赖带来的变化。具体可以使用对象适配器或类适配器实现,对象适配器,通过组合的方式,把被适配对象进行封装。而类适配器则利用集成的方式,通过覆盖被适配者的行为进行扩展。一般通常建议使用对象适配器,减少对继承行为的依赖。

3.3行为型

3.3.1 Template Method(模板方法模式)

模板方法主要应用于会出现重复代码的场景,可以利用模板来定义一个基础骨架流程的抽象类,让子类去根据实际情况来覆盖父类的抽象方法。这样可以把流程约束起来,同时又开放了子类的扩展。

3.3.2 Observer(观察者模式)

观察者模式主要应用于对象之间的依赖和调用,当一个被观察对象发送改变,可以通知到观察对象。观察者模式正式让原有的被观察者和观察者之间的依赖通过观察者模式进行解耦,被观察者不依赖观察者,只需要把自己状态的改变通知出去,由观察者接收后自己来实现后续的逻辑。

3.3.3 Strategy(策略模式)

策略模式定义了算法族,分别封装起来,让它们之间可以相互转换,此模式让算法的变化独立于使用算法的场景。这需要我们把行为抽象化,在使用算法的地方,依赖一种抽象行为。这样当算法进行修改时,只要满足一种算法族业务逻辑,则使用算法的部分不需要进行任何修改,只需要定义新的策略进行扩展。



以上的是软件开发中列举常用的一些设计模式,但并不是只有这些,还有其他的一些模式。在开发过程中也会有多种设计模式组合起来使用的场景。所以我们还是要抓住问题的本质,把变化的部分进行抽象再抽象,减少因为需求的变化造成不必要的修改。

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

Gosling

关注

还未添加个人签名 2017.10.28 加入

还未添加个人简介

评论

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