Franky's LIFE

          Anything... ...

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            53 隨筆 :: 87 文章 :: 6 評論 :: 0 Trackbacks
          GoF23 種設計模式中創建型模式有 5 種,分別是: Singleton 單件模式、 Abstract Factory 抽象工廠模式、 Builder 生成器模式、 Factory Method 工廠方法模式、 Prototype 原形模式。下面分別總結這幾種設計模式。

          ?

          設計模式

          GoF 的描述

          我的理解

          Singleton 單件模式

          保證一個類僅有一個實例,并提供一個該實例全局的訪問點

          控制實體對象的數量

          Abstract Factory 抽象工廠模式

          提供一個接口,讓該接口負責創建一系列 相關或者相互依賴的對象 ,無需指定他們的具體類

          解決一個系列的對象變化的問題

          Builder 生成器模式

          將一個復雜對象的構建與其表示向分離,使得同樣的構建過程可以創建不同的表示

          應對項目中一些復雜對象的創建工作。所謂 復雜對象 ,是指:此對象中還含有其它的子對象

          Factory Method 工廠方法模式

          定義一個用于創建對象的接口,讓子類決定實例化那個類。 FactoryMethod 使得一個類的實例化延遲到子類

          解決的是“某個對象”的創建工作,由于需求的變化,這個對象常常面臨著劇烈的變化,但是這個對象擁有的接口相對穩定。也就是說:枝節常常發生變化,但是枝節與主干的接口相對穩定

          Prototype 原形模式

          使用原型實例指定創建對象的種類,然后通過拷貝這些原型來創建新的對象

          某些結構復雜的對象的創建工作;由于需求的變化,這些對象經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的接口

          ??????

          在學習的過程中,覺得從功能上看 Abstract Factory 模式和 Builder 模式容易混淆, Factory Method 模式和 Prototype 模式不好區分。 Singleton 模式沒什么太大的困難。下面就來分析一下前四種模式。

          一、 Abstract Factory 模式和 Builder 模式:

          Abstract Factory 是應對一系列對象的創建的問題,正如前面文章中舉的例子,對于創建一個汽車對象來說, Abstract Factory 模式更關注一系列的對象的創建,或者說是汽車類型中的各個部分,如: Wheel Engine Body 等等類型的創建。換句話說關注點在這一系列對象上。

          Builder 是應對一個復雜對象創建的問題,或者說是針對這個復雜對象中的子對象的創建的問題。以汽車的例子來說,我覺得比起 Abstract Factory 模式, Builder 模式相對注重汽車類型(上面所說的“復雜對象”)本身以及其各個部分( Wheel Engine Body 等等)類型的創建。 Builder 模式要求這個復雜的類型(汽車)中的各個子類型的結合部分相對穩定,用例子說明就是對于汽車來說,無論用什么配件組裝,個個配件的組裝方式都一樣,有相對穩定的接口。對于這輛車你用什么牌子的 Wheel 、什么牌子的 Engine 可能變化會很大很頻繁。

          二、 Factory Method 模式和 Prototype 模式:

          開始我覺得這兩種模式從功能上講是一樣的(個人觀點),都是封裝了對對象的創建,只不過 Prototype 模式是用 原型克隆 進行拷貝來完成對象的創建,在這之中還應注意淺拷貝和深拷貝的區別。在向同事請教后有點明白。這兩種模式在應用場景上還是一定的區別的。

          Factory Method 模式是重新創建一個對象

          Prototype 模式是利用現有的對象進行克隆,當兩個對象或多個對象雷同的時候,可以考慮用一個已創建的對象去克隆出其余的對象。
          ???以上是對創建型模式的總結,如有不對的觀點歡迎指正。

          posted on 2007-03-19 21:03 Franky 閱讀(153) 評論(0)  編輯  收藏 所屬分類: IT知識
          主站蜘蛛池模板: 涟源市| 拉孜县| 芜湖县| 轮台县| 长阳| 英德市| 天镇县| 绥江县| 博野县| 东乡县| 鹿邑县| 临潭县| 尖扎县| 波密县| 泾川县| 富蕴县| 德昌县| 南溪县| 那坡县| 卫辉市| 鸡东县| 渑池县| 宣武区| 黄陵县| 象州县| 盐山县| 嘉峪关市| 临武县| 大埔区| 平舆县| 大兴区| 安吉县| 桂阳县| 班玛县| 互助| 平和县| 即墨市| 三亚市| 中超| 疏勒县| 晋州市|