應用,一定要應用

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

          2004-05-25

          每次看設計模式這本書的時候都有著相同的感覺,上次沒有真的理解,這次才是理解了,但是還差那么一點點。
          人其實挺奇怪的,這些模式在編程的幾年之內,無論是具體的項目中還是自己的練習中,都使用了很多,只是沒有作為一種模式總結出來而已,而是以經驗的形式存在于腦海之中,隨意的使用,隨意的忘卻。
          可能就是必然的學習過程吧,隨意使用--形成模式--突破模式靈活應用。而模式在這里起著把經驗持久化的作用吧,減少忘卻的可能。
          所以,真正的掌握模式,除了需要理解模式的表現之外,需要理解模式著力解決的問題,理解模式的缺陷和優勢,才能做到最終靈活抽取各個模式之長而靈活組合之,這可能就是我在模式領域追求的無招勝有招的境界吧。

          模式的核心目的大多是兩種之一:重用和解耦

          言歸正傳,還是來說說具體的模式吧:Design patterns


          模式分類:構建型模式
          模式一:抽象工廠(Abstract Factory)
          Factory理解為對象工廠的概念,用以生成一個系列的對象組。
          而Abstract Factory就是基于Factory之上的概念,目的是把多個系列的對象組抽取共性,屏蔽不同系列之間的對象的差異。

          ?系列???? motif?????? windows?
          對象組
          Button??? motifBtn??? wBtn
          Bar?????? motifBar????wBar
          Textbox?? motifTB???? wTB

          class abstractFactory{
          ?Button getButton();
          ?Bar getBar();
          ?Textbox getTextbox();
          }


          button,bar,textbox是一組對象,而我們需要實現motif,windows等不同系列風格的對象組,Abstract Factory提供的方式下,我們對于大多應用程序而言,操作的口是abstractFactory,以及Button,Bar,Textbox這些對象組,而無需具體關心是motif風格還是windows風格的,風格系列的指定只決定于實現abstractFactory的具體工廠類。

          這種方法便于這種系列的增加,但是并不有利于對象組成員的增加,比如要增加一個label對象,我們就需要增加一個抽象對象Lable,還需要修改abstractFactory以及他所有的子類。

          所以使用這種方法的時候,最重要的是對象組的規劃設計。


          模式二:生成器(builder)
          生成器的概念是提供一系列的方法生成對象的不同部分,最終返回一個完整的對象,著力于解決將構造方法和構造步驟分離的問題,builder內部封裝的是構建方法而不是過程。
          做了這樣的分離之后,再將builder做一個抽象,從而使得不同的構建方法和構建過程做到分離。

          假設一個串的存儲管理:
          class builder(){
          ?add(key,value);
          ?addStr(str);
          }

          同樣的操作集合,
          add(key,value),addStr(str)
          對于不同的builder,可能輸出的結果就會有多種:
          key=value;str

          另一種可能:

          ?value
          ?str

          模式三:工廠方法(Factory)
          其實他的另一個名字更加能夠說明問題(虛構造)
          也就是說通過抽象類的共同方法來避免構造時的硬編碼,
          如:button對象有個getBtn的方法,
          就可以避免寫出button btn = new motifButton();這樣的代碼,而將這樣的代碼封裝到了子類自身。


          模式四:原型法(prototype)
          就是在應用時并不是創建一個新的對象,而是從已有的對象中拷貝一個。
          這種方式我在做配置池的時候用到過,每個業務程序從我的池中去拷貝一個對象,然后才進行相關的修改和應
          用。
          這種方式同樣是動態創建類的方法,著重于解決當對象組的成員不穩定的情況,而不是多個系列的問題。

          與Factory相比,他并不是每一個原型都需要一個構建子類。
          缺點:clone本身實現的難度。

          模式五:單件(singleton)
          這種模式使用無數,就不再多說了。用于保證實例的唯一性。

          posted on 2006-08-24 17:08 flyffa 閱讀(923) 評論(0)  編輯  收藏 所屬分類: 讀書
          主站蜘蛛池模板: 二连浩特市| 宁陕县| 香港 | 辽宁省| 神农架林区| 康马县| 攀枝花市| 张掖市| 三原县| 迭部县| 德阳市| 枣阳市| 溧阳市| 临漳县| 罗定市| 樟树市| 玉田县| 三亚市| 平乡县| 安岳县| 综艺| 滨海县| 册亨县| 河曲县| 柘荣县| 富宁县| 潜山县| 昌邑市| 舞阳县| 大关县| 丘北县| 刚察县| 商洛市| 周至县| 民丰县| 垫江县| 云霄县| 文化| 简阳市| 古交市| 南郑县|