几个比较重要的设计模式的总结与应用
2015-05-04 22:24
363 查看
1. 设计模式分为创建型,结构型,行为型。
2. 创建型
2.1 工厂方法。生产同一接口的不同产品。
如:Spring Aop中AopProxyFactory(具体实现类为DefaultAopProxyFactory)生产AopProxy接口下的两个产品Cglib和JdkProxy。
如:Ibatis中DataSourceFactory(三个工厂分别实现该接口)生产接口为DataSource的Dbcp,Jndi,Simple三种不同的数据源。
2.2 单例模式。工厂的一种,但永远只提供相同的一个对象,即一对象只被new一次。
饿汉式(直接new,非延迟加载)。【推荐使用,《Effective Java》71条也建议慎用延迟化加载】
懒汉式(延迟加载),存在同步问题。可以通过加Synchronized或用volatile关键字。double-check也是有问题的,进阶之最终推荐版本为私有静态内部类实现。
3. 结构型
3.1 装饰者模式。每个装饰类都含有一个指向父类(父接口)的引用,然后可以在该引用的基础上,在新实现的方法中添加新的功能。
如:IO中嵌套new对象。new DataInputStream( new FileInputStream( new File( "")) )
3.2 适配器模式。把源接口的实现类适配成目标接口的实现类。目的就在衔接两个不同接口的系统。
如:SpringMvc中的HandlerAdapter
如:Spring Aop中AdvisorAdapter将不同的Advisor(前置,后置,around等)适配成拦截器MethodInterceptor
3.3 代理模式。
如:JdkProxy
4. 行为型
4.1 策略模式。主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
4.2 观察者模式。被观察者(主题)被N个观察者观察着,被观察者有变化,则会导致所有观察者也变化。主要应用于生命周期控制。
如:Tomcat的lifecycle和lifecyclelistener
LifecycleListener代表的是抽象观察者,它定义一个lifecycleEvent方法,这个方法就是当主题变化时要执行的方法。而lifecycle则是主题,如具体主题StandardServer。不过这里的统筹管理是交给LifecycleSupport。它能够触发lifecycle自身的start,stop函数进行子容器的启动关闭(和观察者模式无关),也可以通过使lifecycle变化来触发lifecyclelistener的event事件。
如:Spring的ApplicationListener和ApplicationEvent
实现Listener接口的bean,当容器触发Event事件时将触发这些bean的event处理机制。如容器触发启动事件,同时也能让某些bean也做出相应的启动操作响应。
4.3 模板方法。父类定义骨架方法,骨架方法建议定义为final类型,不被子类覆写。同时骨架方法一般会调用多个抽象方法,这些方法具体留给子类去实现。
如:HttpServlet的service方法。
2. 创建型
2.1 工厂方法。生产同一接口的不同产品。
如:Spring Aop中AopProxyFactory(具体实现类为DefaultAopProxyFactory)生产AopProxy接口下的两个产品Cglib和JdkProxy。
如:Ibatis中DataSourceFactory(三个工厂分别实现该接口)生产接口为DataSource的Dbcp,Jndi,Simple三种不同的数据源。
2.2 单例模式。工厂的一种,但永远只提供相同的一个对象,即一对象只被new一次。
饿汉式(直接new,非延迟加载)。【推荐使用,《Effective Java》71条也建议慎用延迟化加载】
懒汉式(延迟加载),存在同步问题。可以通过加Synchronized或用volatile关键字。double-check也是有问题的,进阶之最终推荐版本为私有静态内部类实现。
3. 结构型
3.1 装饰者模式。每个装饰类都含有一个指向父类(父接口)的引用,然后可以在该引用的基础上,在新实现的方法中添加新的功能。
如:IO中嵌套new对象。new DataInputStream( new FileInputStream( new File( "")) )
3.2 适配器模式。把源接口的实现类适配成目标接口的实现类。目的就在衔接两个不同接口的系统。
如:SpringMvc中的HandlerAdapter
如:Spring Aop中AdvisorAdapter将不同的Advisor(前置,后置,around等)适配成拦截器MethodInterceptor
3.3 代理模式。
如:JdkProxy
4. 行为型
4.1 策略模式。主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
4.2 观察者模式。被观察者(主题)被N个观察者观察着,被观察者有变化,则会导致所有观察者也变化。主要应用于生命周期控制。
如:Tomcat的lifecycle和lifecyclelistener
LifecycleListener代表的是抽象观察者,它定义一个lifecycleEvent方法,这个方法就是当主题变化时要执行的方法。而lifecycle则是主题,如具体主题StandardServer。不过这里的统筹管理是交给LifecycleSupport。它能够触发lifecycle自身的start,stop函数进行子容器的启动关闭(和观察者模式无关),也可以通过使lifecycle变化来触发lifecyclelistener的event事件。
如:Spring的ApplicationListener和ApplicationEvent
实现Listener接口的bean,当容器触发Event事件时将触发这些bean的event处理机制。如容器触发启动事件,同时也能让某些bean也做出相应的启动操作响应。
4.3 模板方法。父类定义骨架方法,骨架方法建议定义为final类型,不被子类覆写。同时骨架方法一般会调用多个抽象方法,这些方法具体留给子类去实现。
如:HttpServlet的service方法。
相关文章推荐
- 针对架构设计的几个痛点,我总结出的架构原则和模式
- 设计模式——抽象工厂模式及在jdk中的应用+几种工厂模式的比较
- 设计模式中几个工厂模式的比较——餐馆的故事
- 几个常用的结构型设计模式总结
- 设计模式一句话与实战应用总结
- UI学习总结--几个比较重要的知识点
- jsp小总结----java ee的开发中有几个重要的开发模式等
- 从头认识设计模式-策略模式-06-对前面几个章节思考的总结
- 关于java中static关键字在单态设计模式的应用学习和总结
- 设计模式中的几个设计原则总结
- <设计模式:java语言中的应用>摘要、总结
- 关于V4L2中操作比较重要的几个命令以及一般操作流程总结
- C++设计模式——单例模式(总结比较全面)
- jsp小总结----java ee的开发中有几个重要的开发模式等
- 关于V4L2中操作比较重要的几个命令以及一般操作流程总结
- 针对架构设计的几个痛点,我总结出的架构原则和模式
- 总结23中设计模式应用场景
- 关于V4L2中操作比较重要的几个命令以及一般操作流程总结
- 设计模式总结1---模式比较
- 【转载】总结23种设计模式应用场景