第三周架构师训练营作业
之前作业1的图没有附在链接里面,这里是单例模式的一个实现图
本周的学习感想主要有如下:
介绍了常用的设计模式,以及一些设计模式在流行框架中的应用(平时可能只管用了,没有注意到)。
简单工厂模式,它可以根据参数不同返回不同类的实例。但是它对factory来说并没有实现ocp,这是简单工厂的一个缺陷。
单例模式,有饿汉和懒汉两种模式,前一种用之前就产生一个实例,后者用的时候才去检查,看需不需要生成实例。在多线程环境下,需要给懒汉模式的getInstance方法加上synchronized关键字防止产生多重的实例,但是synchronized关键字会些微的影响
适配器模式:这个模式相当于在两个不兼容接口中间加入一个connector,没有这个connector的话这两个interface之间是不能直接沟通的。在我们想要使用一个component的功能但是它和我们当前的应用不兼容的时候;当我们的app和用户期待的interface不兼容的时候;当我们想去重用一些legacy code但是又不想去直接改动它的代码的时候,都可以考虑使用这个模式
junit中使用的一些设计模式:模板方法是扩展功能的一个基本模式,它是一种“类的行为模式” 。它是通过继承方法来实现扩展的,父类表示的是一个skeleton,子类会具体的去实现。相较于组合而言它更容易实现(通过继承)
策略模式:与模板方法不同,它是一种“对象的行为模式”,它通过组合来实现不同的功能扩展。我们可以把条件语句转换成对策略的多态调用来使用策略模式。他把策略的实现和使用策略的人分开了,而且可以自由的组合策略,方便随时添加或删除策略,但是什么时候用什么策略这个必须让客户端来决定。
组合模式(composite pattern),这是一种“对象的结构模式”。在这个模式下,我们会发现components看起来会是个树状的结构。比如说操作系统在创建文件的时候,现在流行的一些前端框架比如react and vue,都运用了这个设计模式
装饰器模式:这是一种"对象的结构模式",它可以在不改变对客户端接口的前提下扩展现有对象的功能。和模版方法策略模式相比,它保持对象功能不变,只是相当于给外面包装一层,扩展它的外围功能,但前两者是保持骨架不变,扩展它内部的实现。装饰器和继承相比较来说,虽然他们都是扩展了对象功能,但是继承是静态的,装饰器是动态的,而且因为装饰器可以随便组合,往往就会更复杂
spring框架中主要运用了di依赖注入和控制反转ioc,单例模式和mvc模式。其中spring的单例模式有一些不同,它维护了一个hashmap,不需要我们去写私有的构造函数就可以去控制单例,当取得beanname以后就会在这个hashmap查找有没有实例,有就可以取出,没有就创建,放进map
评论