Spring中用到了哪些設(shè)計(jì)模式?
?一位應(yīng)屆畢業(yè)生被問(wèn)到這樣一道面試題,說(shuō)Spring用到了哪些設(shè)計(jì)模式?其實(shí)只要Spring使用得夠熟練,回答這道題還是非常輕松的。因?yàn)镾pring的命名非常規(guī)范,基本上從類名就可以看得出來(lái)用到了哪些設(shè)計(jì)模式。
今天,我給大家分享一下我的理解。
我給大家總結(jié)以下8種設(shè)計(jì)模式在Spring中的應(yīng)用:
1、工廠模式。
Spring的BeanFactory類,就是使用了簡(jiǎn)單工廠模式。它主要提供getBean()方法,用來(lái)創(chuàng)建對(duì)象的實(shí)例;我們見(jiàn)得比較多的ApplicationContext也是繼承自BeanFactory。
2、單例模式。
Spring中的Bean默認(rèn)為singleton單例。我們可以通過(guò)配置Bean的作用域scope參數(shù)來(lái)進(jìn)行修改。Spring Bean一共有5種內(nèi)置的作用域,分別是singleton、prototype、request、session、globalSession。
3、裝飾器模式。
在Spring中,只要見(jiàn)到以Wrapper命名的類基本都是使用裝飾器模式。比如BeanWrapper,用來(lái)訪問(wèn)Bean的屬性和方法。
4、策略模式。
Spring中Bean的實(shí)例化采用的就是策略模式。因?yàn)锽ean的實(shí)例化包含原生對(duì)象的實(shí)例化,和代理對(duì)象的實(shí)例化,不同對(duì)象實(shí)例化的邏輯也不一樣,所以實(shí)例化策略也不一樣,比如SimpleInstantiationStrategy就是Spring中默認(rèn)的實(shí)例化策略。
5、適配器模式。
在Spring,只要是以Adapter命名的類基本都是適配器模式的應(yīng)用。比如MVC模塊中的HandlerAdapter。
6、代理模式。
比如AOP模塊中的AopProxy,用到了JDK的動(dòng)態(tài)代理和CGLIB字節(jié)碼生成技術(shù);
7、模板方法模式。
主要用來(lái)解決代碼重復(fù)的問(wèn)題。Spring提供了非常多的模板類來(lái)減少重復(fù)代碼,基本都是以Template結(jié)尾,比如RestTemplate,JmsTemplate,JdbcTemplate。
8、觀察者模式。
主要用于當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都會(huì)得到通知,在Spring中一般以Listener結(jié)尾,比如ApplicationListener等等。
當(dāng)然,Spring是一個(gè)非常經(jīng)典的框架,它用的的設(shè)計(jì)模式也非常多。而且很多設(shè)計(jì)模式經(jīng)常是混合使用的,都是你中有我,我中有你。所以,我們?cè)陂喿x代碼的時(shí)候,還不能簡(jiǎn)單地?cái)喽硞€(gè)類就一定是只用了某一種設(shè)計(jì)模式。
以上就是我對(duì)Spring中主要設(shè)計(jì)模式的分享。