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

本文介绍了设计模式中的三大类——创建型、结构型和行为型,并举例说明了工厂方法、单例模式、装饰者模式、适配器模式、代理模式、策略模式、观察者模式和模板方法的具体应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值