設計模式複習

設計模式六大原則

開閉原則:對擴展開放,對修改關閉。即在不修改一個軟件實體的基礎上去擴展其他功能。

里氏代換原則:在軟件系統中,一個可以接受基類對象的地方必然可以接受一個子類對象。

依賴倒轉原則:針對於接口編程,依賴於抽象而不依賴於具體。

接口隔離原則:使用多個隔離的接口取代一個統一的接口。降低類與類之間的耦合度。

迪米特法則(最少知道原則):一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

合成複用原則:在系統中應該儘量多使用組合和聚合關聯關係,儘量少使用甚至不使用繼承關係

J2ee常見設計模式,總共23種

 創建型模式(工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式)

結構型模式(適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式)

行爲型模式(策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式)

 創建型模式(工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式)

結構型模式(適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式)

行爲型模式(策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式)

常見的設計模式應用:

1、簡單工廠模式:通過專門定義一個類來負責創建其他類的實例,被創建的實例通常具有共同的父類,角色有工廠類角色和抽象產品角色和具體產品角色;工廠類是本模式的核心,含有一定的商業邏輯和判斷邏輯,用來創建產品。抽象產品角色一般是具體產品繼承的父類或者實現的接口。工廠類所創建的對象就是此角色的實例,在java中一個具體類實現。

2、單例模式:確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例,應用場景比如配置文件解析器,連接工廠等等。

單例又分爲惡漢單例和懶漢單例

惡漢單例是線程安全的,在類創建的同時就已經創建好一個靜態對象供系統使用,以後不在改變。

懶漢單例是延時加載的,在加載類時創建實例,如果創建對象時不加sychronized則會導致該對象的訪問不是線程安全的。

單例模式可以節約系統資源,對於一些需要頻繁創建和銷燬的對象單例模式無疑可以提高系統的性能;缺點是單例模式中沒有抽象層,因此擴展有很大的困難,濫用單例會帶來一些負面的問題。    缺點:由於單例模式中沒有抽象層,因此單例類的擴展有很大的困難。濫用單例將帶來一些負面問題,如爲了節省資源將數據庫連接池對象設計爲的單例類,可能會導致共享連接池對象的程序過多而出現連接池溢出;如果實例化的對象長時間不被利用,系統會認爲是垃圾而被回收,這將導致對象狀態的丟失。

3、策略模式:商場促銷,面向對象的編程不是類越多越好,類的劃分是爲了封裝,但是分類的基礎是抽象,具有相同屬性和功能的對象的抽象集合纔是類;策略模式定義了算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化不會影響使用算法的客戶。電影票的購買,有打折、促銷、會員、承認、小孩單價都不同。可以用工廠模式實現,但是由於工廠包括了所有的收費方式,電影院可能經常性的更改打折額度和返利額度,每次維護或者擴展收費方式都要改動這個工廠,以致於代碼需要重新編譯、部署。策略模式是一種定義一系列算法的方法,所有這些算法完成的都是相同的工作,只是實現不同,它可以以相同的方式調用所有的算法,減少了各種算法類與使用算法類之間的耦合。

4、單一職責原則:如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受意向不到的破壞。

5、開放封閉原則:是指軟件i實體(類、模塊、函數)應該可以擴展,但是不可修改。

特徵就是對於擴展是開放的,對於更改是封閉的。軟件會遇到很多問題,不推到重來的辦法就是多擴展、少做修改。

Spring中涉及的設計模式總結

簡單工廠:BeanFactory;根據傳入一個唯一的標識來獲得Bean對象,但是否是在傳入參數後創建還是傳入參數前創建這個要根據具體情況來定。

實質:由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。

單例模式:Spring依賴注入Bean實例默認是單例的;保證類僅有一個實例,並提供一個訪問它的全局訪問點。

適配器模式:Springmvc中的適配器HandlerAdatper;

代理模式:AOP底層就是動態代理模式的實現,動態代理在內存中構建的,不需要手動編寫代理類;靜態代理,需要手工編寫代理類,代理類引用被代理對象。

策略模式:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章