第三周 - 总结

发布于: 18 小时前

几个重要设计模式的总结

单例模式:

处理资源访问冲突,标识全局唯一类,有懒汉和恶汉实现方式。

工厂模式:

分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。

案例可参考DI容器的实现:一个简单的 DI 容器的核心功能一般有三个:配置解析、对象创建和对象生命周期管理。读取配置并创建对象在工厂类中,利用了反射机制,一般用map缓存创建的单例对象。

桥接模式:

将抽象和实现解耦,让它们可以独立变化。JDBC 驱动是桥接模式的经典应用。

装饰器模式:

装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。从 Java IO 的设计来看,装饰器模式相对于简单的组合关系,还有两个比较特殊的地方。

第一个比较特殊的地方是:装饰器类和原始类继承同样的父类,这样我们可以对原始类“嵌套”多个装饰器类。

第二个比较特殊的地方是:装饰器类是对功能的增强,这也是装饰器模式应用场景的一个重要特点。=> 代理模式中,代理类附加的是跟原始类无关的功能,而在装饰器模式中,装饰器类附加的是跟原始类相关的增强功能。

适配器模式:

用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。案例参考slf4j,它不仅仅提供了统一的接口定义,还提供了针对不同日志框架的适配器。

组合模式:

将一组对象组织成树形结构,以表示一种“部分 - 整体”的层次结构。

组合模式的设计思路,与其说是一种设计模式,倒不如说是对业务场景的一种数据结构和算法的抽象。

例子: 统一的文件目录树

模板方法模式:

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

模板模式主要是用来解决复用和扩展两个问题。案例如下:

Java Servlet,service()函数是模板方法,提供了扩展点(doGet()、doPost() 方法),让框架用户在不用修改 Servlet 框架源码的情况下,将业务代码通过扩展点镶嵌到框架中执行。

JUnit TestCase 类中,runBare() 函数是模板方法,它定义了执行测试用例的整体流程:先执行 setUp() 做些准备工作,然后执行 runTest() 运行真正的测试代码,最后执行 tearDown() 做扫尾工作。

回调函数:基于组合来实现,而模板方法模式基于继承来实现。在代码实现上,回调相对于模板模式会更加灵活。

其他待继续完善。

发布于: 18 小时前 阅读数: 4
用户头像

铁血杰克

关注

还未添加个人签名 2017.12.18 加入

还未添加个人简介

评论

发布
暂无评论
第三周-总结