1、工廠模式:在各種BeanFactory以及ApplicationContext創建中都用到了
2、模版模式:在各種BeanFactory以及ApplicationContext實現中也都用到了
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合於這種模式,如大話設計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景就適合於模板方法模式。我這次自己寫的是一個汽車啟動的過程,每一種汽車啟動的過程都基本是一樣的流程,無非是這一過程中存在一些細小差別。
相關代碼
package com.roc.template; /** * 汽車模型 * 模型模式 * @author liaowp * */ public abstract class CarModel { /** * 汽車啟動 */ protected abstract void start(); /** * 停車 */ protected abstract void stop(); /** * 用戶並不需要關注你的車怎么啟動或者停下來的,可以開可以停就可以啦 */ final public void excet(){ this.start(); this.stop(); } }
package com.roc.template; /** * 大眾車 * @author liaowp * */ public class Wcar extends CarModel{ @Override protected void start() { System.out.println("大眾車啟動 。。。。。。。。突突突"); } @Override protected void stop() { System.out.println("大眾車停車。。。。。。。。。"); } }
package com.roc.template; public class Ocar extends CarModel{ @Override protected void start() { System.out.println("奧迪 無匙啟動 突突突"); } @Override protected void stop() { System.out.println("奧迪 停車 "); } }
package com.roc.template; /** * 客戶端 * @author liaowp * */ public class Client { public static void main(String[] args) { CarModel wcar=new Wcar();//家里的第一輛車,作為用戶的我們並不需要關注車怎么啟動的.子類變量變為父類。多態 wcar.excet(); //突然家里需要第二輛車了 奧迪 我們也不需要關注他怎么生產啟動的 CarModel ocar=new Ocar(); ocar.excet(); } }
模板方法模式適用場景
-
一次性實現一個算法的不變的部分,並將可變的行為留給子類來實現。
-
各子類中公共的行為應被提取出來並集中到一個公共父類中以避免代碼重復。這是Opdyke和Johnson所描述過的“重分解以一般化”的一個很好的例子。首先識別現有代碼中的不同之處,並且將不同之處分離為新的操作。最后,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
-
控制子類擴展。模板方法只在特定點調用“hook”操作,這樣就只允許在這些點進行擴展
3、單例模式:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點
spring中的單例模式完成了后半句話,即提供了全局的訪問點BeanFactory。但沒有從構造器級別去控制單例,這是因為spring管理的是是任意的java對象。核心提示點:Spring下默認的bean均為singleton,可以通過singleton=“true|false” 或者 scope=“?”來指定。
4、代理模式:在Spring的Aop中,使用的Advice(通知)來增強被代理類的功能。Spring實現這一AOP功能的原理就使用代理模式(1、JDK動態代理。2、CGLib字節碼生成技術代理。)對類進行方法級別的切面增強,即,生成被代理類的代理類, 並在代理類的方法前,設置攔截器,通過執行攔截器重的內容增強了代理方法的功能,實現的面向切面編程。
5、策略模式:第一個地方,加載資源文件的方式,使用了不同的方法,比如:ClassPathResourece,FileSystemResource,ServletContextResource,UrlResource但他們都有共同的借口Resource;第二個地方就是在Aop的實現中,采用了兩種不同的方式,JDK動態代理和CGLIB代理;(策略模式就是將有共性的行為抽象為一個接口,其中有此種行為的聲明。該接口的實現類都實現了這個行為,但是提供了不同的行為表現,也就是說都是支付,有用網銀的,也有用支付寶的。在執行此類行為的類中含有該接口的引用,在執行行為前要確定該行為的表現,選擇適合的執行)
6、觀察者模式:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。spring中Observer模式常用的地方是listener的實現。如ApplicationListener。