第三周学习总结
知识点总结
面向对象设计
设计模式
创建模式
结构模式
行为模式
OOD 的原则
OCP
DIP
LSP
SRP
ISP
OOD 的目标
强内聚
低耦合的程序
设计模式的定义
每一种模式都描述了一种问题的通用解决方案。这种问题在我们的环境中,不停地出现。
设计模式是一种可重复使用的解决方案。
设计模式的四个部分
模式名称:由少量的字组成的名称,有利于我们表达我们的设计。
模式里的角色:必不可少的核心功能是由哪几个类实现的
待解决的问题:描述何时需要运用这种模式,以及运用模式的环境及上下文
解决方案:描述组成设计的元素(类和对象)、它们的关系、职责以及合作。
结论:运用这种方案所带来的利和弊。主要指它对系统的弹性、扩展性、可移植性的影响。
设计模式的分类
按功能分
创建模式(对类实例化过程的抽象)
简单工厂模式(Simple Factory)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
创建者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)
结构模式(将类或者对象结合在一起形成更大的结构)
外观模式/门面模式(Facade 门面模式)
适配器模式(Adapter)
代理模式(Proxy)
装饰模式(Decorator)
桥梁模式/桥接模式(Bridge)
组合模式(Composite)
享元模式(Flyweight)
行为模式(堆在不同的对象之间划分责任和算法的抽象化)
模板方法模式(Template Method)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
职责链模式(Chain of Responsibility)
命令模式(Command)
访问者模式(Visitor)
调停者模式(Mediator)
备忘录模式(Memento)
迭代器模式(Iterator)
解释器模式(Interpreter)
按方式分
类模式:以继承的方式实现,静态的
对象模式:以组合的方式实现,动态的
常见模式
简单工厂模式
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
单例模式
Singleton 模式保证产生单一实例,就是说一个类只产生一个实例。使用 singletong 有
两个原因:
是因为只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗
是当多个用户使用这个实例的时候,便于进行统一控制(比如打印机对象)。
适配器模式
这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。
类适配器
对象适配器
类适配器使用继承关系来实现,对象适配器使用组合关系来实现。
策略模式
策略模式可以使算法的变化独立于使用它们的代码块。
策略模式用来解耦策略的定义、创建、使用。实际上,一个完整的策略模式就是由这三个部分组成的。
策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。
策略的创建由工厂类来完成,封装策略创建的细节。
策略模式包含一组策略可选,客户端代码如何选择使用哪个策略,有两种确定方法:编译时静态确定和运行时动态确定。其中,运行时动态确定才是策略模式最典型的应用场景。
组合模式
主要是用来处理树形结构数据。
将一组对象组织成树形结构,将单个对象和组合对象都看做树中的节点,以统一处理逻辑,并且它利用树形结构的特点,递归地处理每个子树,依次简化代码实现。使用组合模式的前提在于,你的业务场景必须能够表示成树形结构。
装饰器模式
装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。
装饰器的作用
在不改变对客户端的接口的前提下(对客户端透明)
扩展现有对象的功能
装饰器的优缺点
装饰器和模板方法、策略模式的比较
装饰器保持对象的功能不变,扩展其外围的功能
模板方法和策略模式则保持算法的框架不变,而扩展其内部的实现
装饰器和继承的比较
都可以用来扩展对象的功能
但装饰器是动态的,继承是静态的
装饰器可以任意组合
设计模式的应用
JUnit 中的设计模式
模板方法模式
强制子类需要实现的方法,需要子类补充实现的细节
子类不需要覆盖的情况下要使用 final
一般会提供一个默认实现(缺省适配器模式)
子类选择性地覆盖,以便实现在特定的时机触发自己的代码
策略模式
JUnit 实现 eclips 的 plugin 接口,实现 eclips 中 junit 插件的功能
抽象类 TestCase,由我们自定义的测试用例实现
Spring 中的设计模式
依赖注入和控制反转
单例模式
观察者模式
模板模式
适配器模式
组合模式
工厂模式
总结
工作以来从简单的 CRUD 到整合开发框架,组合轮子。一直以来只是在用别人的框架,没有去想过在自己工作中定制一个适合的框架来解决系统架构中一些难以解决的问题。从设计原则到设计模式,深入理解这些内容都是为开发框架提供服务。目前工作中确实遇到了这个问题市面上并没有很好的解决方案也一直在琢磨自己整一套东西来解决。不断的补充知识点,扩展思维去落地实施。设计模式是我必须吃透的一部分内容。
评论