几个比较重要的设计模式的总结与应用

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方法。

你可能感兴趣的:(设计模式)