架构师训练营第三周:代码重构
作业一:请在草稿纸上手写一个单例模式的实现代码,拍照提交作业
作业二:根据当周学习情况,完成一篇学习总结
设计模式
设计模式是依据 OCP、DIP、LSP、SRP、ISP 等原则,解决经常出现的问题、可重复使用的通用解决方案。
什么是设计模式?
每一种模式都描述了一种问题通用的解决方案,这种问题在我们的环境中,不断出现。
设计模式是一种可重复使用的解决方案
设计模式的四个部分:
模式的名称:由少量单词组成的名称,有助于表达我们的设计
待解问题:描述了何时需要运用这种模式,以及运用模式的环境(上下文)
解决方案:描述了组成设计的元素(类和对象)、他们之间的关系、职责以及合作。但这种解决方案是抽象的,它不代表具体的实现。
结论:运用这种方案所带来的利和弊,主要是指它对系统的弹性、扩展性、可移植性的影响。
设计模式的分类
从功能分:
创建模式(Creational Patterns):对类的实例化过程的抽象
- 抽象工厂模式(Abstract Factory Pattern)
- 工厂方法模式(Factory Method Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
结构模式(Structural Patterns):将类和对象结合在一起形成更大的结构
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 装饰模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
行为模式(Bahavioral Patterns):对在不同的对象之间划分责任和算法的抽象
- 责任链模式(Chain of Reposibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 策略模式(Strategy Pattern)
- 模板方法(Template Method Pattern)
- 访问者模式(Visitor Pattern)
从方式分:
类模式:以继承的方式实现模式,静态的
对象模式:以组合的方式实现模式,动态的
单例模式
为什么要使用单例模式?
性能需求:减少实例频繁创建和销毁带来的资源消耗
功能需求:当多个用户使用这个实例时,便于进行统一控制。
适配器模式
什么是适配器模式?适配器模式是将一个类的接口转换成客户端希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
什么时候使用适配器模式?系统需要使用现有的类,而这个类的接口与我们所需要的不同。
适配器模式的实现
类适配器:继承已经存在的类,实现需要适配的接口
对象的适配器:;引用已经实现的类实例,实现需要适配的接口
模板方法模式
什么是模板方法模式?定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是扩展功能的最基本模式之一,是一种类的行为模式。它是通过集成的方法来实现扩展:基类负责算法的轮廓和骨架;子类负责算法的具体实现。
模板方法的实现:
抽象方法:强制子类实现
具体方法:子类可以选择是否覆盖
钩子方法:空实现(缺省适配器模式);子类可选择性覆盖,以便在特定时机做事。
策略模式
策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。
策略模式是扩展功能的另一种最基本的模式,是一种对象的行为模式。他是通过组合的方法来实现扩展。
什么时候使用策略模式?
系统需要在多种算法中选择一种
重构系统时,将条件语句转换成对于策略的多态性调用
策略模式与模板方法通常是结合使用,比如 JUnit 和 Tomcat Servlet。
组合模式
组合模式是将对象以树形结构组织起来,以达成“部分-整体”的层次结构, 使得客户端对单个对象和组合对象的使用具有一致性。组合模式是一种对象的结构模式。
什么时候使用组合模式?需求中是体现部分与整体层次的结构时,希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式。
组合模式定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象。组合模式让客户可以一致的使用基本对象和组合对象。
装饰模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
装饰模式是为已有功能动态添加更多功能。把类中的装饰功能从类中搬移出去,简化原有类。可以有效的把类的核心职责和装饰功能区分开,而且去除相关类中重复的装饰逻辑。
装饰模式是一种对象的结构模式。
装饰器模式在不改变对客户端的接口前提下(对客户端透明),扩展现有对象的功能。
作业提交
作业提交地址: https://jinshuju.net/f/K2tVxc
版权声明: 本文为 InfoQ 作者【看山】的原创文章。
原文链接:【http://xie.infoq.cn/article/26ee5aa919f71c5be97b4f1ff】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论