熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

設計模式的原則

2013-11-12 23:37:50  來源: Java高級技術 

  近年來大家都開始注意設計模式那麼到底我們為什麼要用設計模式呢?這麼多設計模式為什麼要這麼設計呢?說實話以前我還真沒搞清楚就是看大家一口一個Design pattern心就有點發虛於是就買了本四人幫的設計模式結果看得似懂非懂:看得時候好像是懂了過一會就忘了可能是本人比較愚鈍吧:))最近有了點感悟獨樂不如眾樂與大家分享一下還望指教!
  為什麼要提倡Design Pattern呢?根本原因是為了代碼復用增加可維護性那麼怎麼才能實現代碼復用呢?OO界有前輩的幾個原則開-閉原則(Open Closed Principal)裡氏代換原則合成復用原則設計模式就是實現了這些原則從而達到了代碼復用增加可維護性的目的
  
  一開-閉原則
  
  此原則是由Bertrand Meyer提出的原文是Software entities should be open for extensionbut closed for modification就是說模塊應對擴展開放而對修改關閉模塊應盡量在不修改原(是指原來的代碼)代碼的情況下進行擴展那麼怎麼擴展呢?我們看工廠模式factory pattern:假設中關村有一個賣盜版盤和毛片的小子我們給他設計一光盤銷售管理軟件我們應該先設計一光盤接口如圖
  
  
  
  而盜版盤和毛片是其子類小子通過DiscFactory來管理這些光盤代碼為
  
  public class DiscFactory{  public static 光盤 getDisc(String name){    return (光盤)ClassforName(name)getInstance();  }}
  有人要買盜版盤怎麼實現呢?
  
  public class 小子{  public static void main(String[] args){    光盤 d=DiscFactorygetDisc(盜版盤);    光盤賣();  }}
  
  如果有一天這小子良心發現了開始賣正版軟件沒關系我們只要再創建一個光盤的子類正版軟件就可以了不需要修改原結構和代碼怎麼樣?對擴展開發對修改關閉閉原則
  工廠模式是對具體產品進行擴展有的項目可能需要更多的擴展性要對這個工廠也進行擴展那就成了抽象工廠模式
  
  二裡氏代換原則
  
  裡氏代換原則是由Barbara Liskov提出的如果調用的是父類的話那麼換成子類也完全可以運行比如
  光盤 d=new 盜版盤();
  d賣();
  現在要將盜版盤類改為毛片沒問題完全可以運行Java編譯程序會檢查程序是否符合裡氏代換原則還記得java繼承的一個原則嗎?子類overload方法的訪問權限不能小於父類對應方法的訪問權限比如光盤中的方法訪問權限是public那麼盜版盤毛片中的方法就不能是package或private編譯不能通過為什麼要這樣呢?你想啊如果盜版盤方法是private那麼下面這段代碼就不能執行了
  光盤 d=new 盜版盤();
  d賣();
  可以說裡氏代換原則是繼承復用的一個基礎
  
  三合成復用原則
  
  就是說要少用繼承多用合成關系來實現我曾經這樣寫過程序有幾個類要與數據庫打交道就寫了一個數據庫操作的類然後別的跟數據庫打交道的類都繼承這個結果後來我修改了數據庫操作類的一個方法各個類都需要改動牽一發而動全身!面向對象是要把波動限制在盡量小的范圍
  
  
  在Java中應盡量針對Interface編程而非實現類這樣更換子類不會影響調用它方法的代碼要讓各個類盡可能少的跟別人聯系不要與陌生人說話這樣城門失火才不至於殃及池魚擴展性和維護性才能提高
  
  理解了這些原則再看設計模式只是在具體問題上怎麼實現這些原則而已張無忌學太極拳忘記了所有招式打倒了玄冪二老所謂心中無招設計模式可謂招數如果先學通了各種模式又忘掉了所有模式而隨心所欲可謂OO之最高境界呵呵搞笑搞笑!
  
  這是我的一點心得大家可能理解得更深刻還望指教!
  

From:http://tw.wingwit.com/Article/program/Java/gj/201311/11159.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.