第三周总结
设计模式分为创建模式,结构模式,行为模式三种。
创建模式:对类的实例化过程进行抽象,解耦
结构模式:将类或者对象组合在一起形成更大的结构
行为模式:对在不同的对象之间划分职责和算法的抽象化,如何对行为进行抽象,解耦
OOD的原则:SRP(单一职责),OCP(开闭),LSP(里氏替换),ISP(接口隔离),DIP(依赖倒置),简称SOLID原则。
OOD的目标:高内聚,低耦合的程序
什么是设计模式?
每一种模式都描述了一种问题的通用解决方案。这种问题,在我们现实世界中,不停地出现。设计模式是一种可重复使用的解决方案。是大家共同的经验。
模式的四部分:
1)模式的名称:包括模式里面包含的角色,也都有名称。(比如:观察者模式,就有观察者和被观察者)
2)待解问题:何时使用该模式,使用该模式的上下文
3)解决方案:描述了组成设计的元素(对象和类),它们的关系,职责以及合作。
4)结论:使用这种模式的利弊,对系统的弹性,可移植性,可伸缩性的影响。
使用单例模式的原因:
1)全局唯一实例,减少对象创建和销毁带来的开销。(性能需求)
2)当多个用户使用这个实例的时候,方便进行统一控制。(功能需求)
适配器模式:程序需要面向接口A编程,但是提供了相关功能的却是类B,类B和接口并不兼容,因此需要针对接口A实现一个适配器类C,由类C统一去调用类B。
工厂模式:
Sorter是一种策略模式,Client依赖工厂来创建对应的Sorter实例,Client不直接依赖具体的排序Sorter。
模板方法模式:
模板方法模式扩展功能的最基本模式之一,它是一种类的行为模式。它通过继承的方式来实现扩展,基类负责算法的轮廓和骨架,子类负责算法的具体实现。(java Servlet中的init,service,destroy方法就属于模板方法)
组合模式:
是一种对象的结构模式。主要是用来处理树形结构(AWT控件,文件系统,语法树,junit中的TestSuite等等)。
装饰器模式:
也被笼统地称为“包装器”(Wrapper),特点:装饰者和被装饰者都实现同一个接口,被装饰者通过构造方法传递到装饰者里面。典型应用场景:junit中的RepeatedTest,jdk中的IOStream,Collections.synchronizedList,java servlet里面的HttpServletRequestWrapper。(适配器是转换成另一个接口,而装饰器则是保持接口不变)
装饰器与模板方法,策略模式的比较:
1)装饰器保持原有对象的功能不变,扩展其外围功能。
2)模板方法和策略模式保持算法框架不变,而扩展其内部实现。
装饰器和继承比较:
1)都可以用例扩展对象的功能
2)装饰器是动态的,继承是静态的
3)装饰器可以任何组合,甚至可能组合出荒谬的结果
依赖注入DI和控制反转IoC
通过依赖注入的方式实现控制反转。
评论