项目实际使用场景+常用设计模式总结,通俗易懂

前言:花了一个上午整理出来的设计模式+自己的一些理解,希望帮助你们能更好的结合实际场景理解设计模式,本文不讨论代码,关于设计模式的代码,网上有很多,本文只讨论理解~~

1:工厂方法模式:类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改一般用静态工厂,直接类名.方法就行,不用实例化,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。(springMVC中的bean工厂

2:单例模式:springMVC中有,默认bean是singleton。保证类只有一个实例。单例模式注意几点:

1:采用了延时加载策略(懒汉式)和立即加载策略(饿汉式)。

2:构造器必须私有,不能让其实例化。

3:volatile保证有序性,禁止重排序。

4:单例模式对象静态化,因为静态方法访问静态成员变量。

5:双重检测。

3:原型模式本质就是clone方法。

4:适配器模式:SpringMVC:前端控制器通过处理器映射器找到相对性的handler,但是handler有很多,调用需要的handler就要用if判断了。Springmvc创建了一个适配器接口,接口下有每个handler的适配器实现类,这样在扩展controller的时候,增加一个适配器就行。这样,前端控制器只需要调用处理器适配器即可。剩下的事情交给处理器适配器去适配。

5:装饰模式:io流。过滤流BufferedInputStream去装饰节点流(fileIuputstream)

6:代理模式:springMVC AOP。

7:门面模式(外观模式):化零为整。提供一个统一的接口去访问多个子系统的不同接口。例如spring ApplicationContext,他实现了factory,ResourceLoader等接口,对外统一提供:加载配置,解析资源,创建bean,提供环境,启动流程等功能。

8:组合模式:把一组相似的对象当做单一的对象。常用于树形结构中,例如二叉树。

9:享元模式:内存消耗比较大的时候可能用享元模式,比如数据库连接池。

10:策略模式:不同的国家,交税有不同的算法。其实就是java的多态,父类的引用指向子类的对象。

例如:排序一组猫。可以按照体重,身高,色差,年龄等排序,那我们就可以实现Comparator接口,定义一组身高比较器、体重比较器、年龄比较器等,比较的方法里面直接new出Comparator引用,但是实例化对象指向每个不同的比较器(不同的策略)。(AOP的代理不同策略,分为jdk动态代理(实现接口)和cglib代理)

12:观察者模式:redis做消息订阅发布。

13:责任链模式有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。

简述springMVC流程:在web.xml中部署DispaterServlet,并配置springmvc.xml等文件;

将映射文件请求到处理器HandlerMapping;

HandlerMapping会把请求映射为HandlerExecutionChain类型的handler对象;

将handler对象作为参数传递给HandlerAdapter的实例化对象,调用其handler方法会生成一个ModelAndView对象;

通过ViewResolver视图解析器,将上一步骤中生成的ModelAndView解析为View;

DispatcherServlet根据获取到View,将视图返回给用户

注:HandlerExecutionChain是由handler对象和拦截器组成。它将请求分配到链上注册的处理器执行。

14:备忘录模式:撤销快捷键,数据库事务的回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值