写点什么

Week 3 作业 02

用户头像
Croesus
关注
发布于: 2020 年 10 月 04 日



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

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

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

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

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



设计模式的分类 从功能分



从方式分

  • 类模式

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

  • 对象模式

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



简单工厂的优缺点

优点:

  • 使 Client 不再依赖 Sorter 的具体实现(如 BubbleSorter)

  • 对 Client 实现 OCP - 增加 Sorter 不影响 Client

  • 克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。

缺点:

  • 对 Factory 未实现 OCP - 增加 Sorter 需要修改 Factory

  • 每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。

https://blog.csdn.net/tian_yan71/article/details/78843900

https://blog.csdn.net/qq_17555933/article/details/102867928



改进一所存在的问题

解决了 Factory 的 OCP 问题吗?

  • 增加 Sorter 实现时,不需要修改 Factory 了

  • 但是仍然需要修改 Client

其它问题

  • 丧失了编译时的类型安全 Ø Client 和 Factory 均类型不安全

  • Client 仍然“知道”Sorter 的实现是什么

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

改进二的优缺点

优点

  • 满足 OCP?

  • 对 Client 和 Factory 均满足

  • 满足 OCP 方法

  • 抽象

  • 动态编程(即将编译时类型检查转变成运行时检查)

缺点

  • 缺少编译时类型安全

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

  • 假如需要传递参数?

这种做法其实相当重要

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

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



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

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



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

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

实现一个单元测试的步骤 创建测试类,从 TestCase 派生 初始化

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

  • 覆盖基类的方法:protected void tearDown() 书写测试方法

  • 命名规则:public void testXyz()



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

  • 它是一种“类的行为模式” 它是通过“继承”的方法来实现扩展

  • 基类负责算法的轮廓和骨架 • 子类负责算法的具体实现 组合 vs. 继承

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

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



模板方法的形式 抽象方法

  • protected abstract void step1();

  • 强制子类实现该步骤。 具体方法

  • protected void doSomething() { … }

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

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

  • protected void setUp() { }

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

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





什么时候使用策略模式? 系统需要在多种算法中选择一种 重构系统时,

  • 将条件语句转换成对于策略的多态性调用 策略模式的优点(对比模板方法)

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

  • 策略对象可以自由组合 策略模式可能存在的问题:

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















用户头像

Croesus

关注

还未添加个人签名 2019.01.05 加入

还未添加个人简介

评论

发布
暂无评论
Week 3 作业 02