写点什么

设计模式 - 学习总结笔记

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

设计模式定义

什么是设计模式:

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

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

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

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

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

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

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


设计模式的分类

从功能分:

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

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

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

从方式分:

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

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


优化简单工厂

通过配置文件去获得构造实现类的具体的变更 ,解决了简单工厂类最重要的问题:工厂本身的开闭原则如何解决 ? 通过配置文件解决。



有点:

满足 OCP

  • 对 Client 和 Factory 均满足

  • 抽象 OCP 方法:

  • 抽象

缺点:

  • 缺少编译时类型安全

  • 限制了 Sorter 的实现只能通过默认构造函数创建

  • 假如需要传递参数

这种做法其实相当重要:

  • 简单工厂非常重要,是许多其他模式的基础

  • 而该机制解决了简单工厂最致命的问题


单例模式:

单例模式保证产生单一实例,就是说一个类只产生一个实例。使用单例模式有两个原因:

  • 是因为只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗;

  • 是当多个用户使用这个实例的时候,便于进行统一控制(比如打印机对象)。

前者是性能需求,后者是功能需求。


单例:饿汉模式:

每一个单列实现的构造函数 ,一定是私有的构造函数,才能保证应用程序或者外部无法通 new 这个构造函数,创建出一个对象;

另外如何去获得这个实例,通过一个 public static 公有的静态方法, 由这个方法来返回这个静态对象。同时也通过这个方法保证了实例对象的单一性。  

私有成员变量会被提前创建出来。

单例:懒汉模式

和饿汉模式不同的是:当调用 getInstance 的时候才去创建私有成员变量。

并发情况下可能会可能会出现多线程多实例,需要加上一个 synchronized 锁。

建议使用第一种方法。

单例中的成员变量是多线程重用的,可能会产生意想不到的结果,因此尽量将单例设计为无状态对象(只提供服务,不保存状态)。


适配器模式 




适配器的作用:

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

JUnit 中的设计模式

实现一个单元测试步骤:

创建测试类,从 TestCase 派生

初始化:覆盖基类方法:protected void setUp()

书写测试方法:命名规范:public void testXyz()

清除环境:覆盖基类的方法:protected void tearDown()

 模板方法模式是扩展功能的最基本模式之一,它是一种类的行为模式

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

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

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

模板方法的形式:

抽象方法:强制子类实现该步骤。

具体方法:子类不需要覆盖,但是可以覆盖之。如果明确告诉子类“不需要覆盖它”,最好标明:final

钩子方法:空的实现(缺省适配器模式),子类可选择地覆盖之,以便在特定的时机做些


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

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

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

什么时候使用策略模式?

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

重构系统时:将条件语句转换成对于策略的多态性调用

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

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

  • 策略对象可以自由组合

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

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


装饰器模式:是一种对象的结构模式

装饰器的作用:

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

  • 扩展现有对象的功能

 

用户头像

Xuenqlve

关注

还未添加个人签名 2018.05.03 加入

还未添加个人简介

评论

发布
暂无评论
设计模式 - 学习总结笔记