3 設計模式 建立型

2021-07-24 19:57:42 字數 3778 閱讀 8393

參考文章:工廠三兄弟之抽象工廠方法模式

工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題,但由於工廠方法模式中的每個工廠只生產一類產品,可能會導致系統中存在大量的工廠類,勢必會增加系統的開銷。此時,我們可以考慮將一些相關的產品組成乙個「產品族」,由同乙個工廠來統一生產,這就是我們本文將要學習的抽象工廠模式的基本思想。

1、定義

抽象工廠模式為建立一組物件提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只是建立一種產品,它負責建立一族產品。抽象工廠模式定義如下:

抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,它是一種物件建立型模式。

2、uml圖

注意:虛線三角箭頭表示依賴

實線三角形表示例項化(抽象的具體)

與工廠方法相比,抽象工廠建立是的一組產品,而不是單個產品。

3、場景與實現

寶馬工廠除了生產寶馬汽車外,還生產寶馬自行車;紅旗工廠也生產紅旗汽車還生產紅旗自行車,在此,bmw和hongqi是工廠,同一品牌的汽車和自行車構成了乙個產品族,乙個工廠可以生產一族產品,而不只是一種產品,我們需要買的是一人產品族。

1) 抽象的產品

car.class.

package com.weimob.o2o.carl.design.******factory;

/** * 抽象產品 -- 汽車

* created by carl on 2016/11/19.

*/public

abstract

class

car

// 宣告抽象業務方法

public

abstract

void

drivecar();

}

and bike.class

package com.weimob.o2o.carl.design.abstractfactory;

/** * created by carl on 2016/11/22.

*/public

inte***ce

bike

2) 具體的產品

bmw.class

package com.weimob.o2o.carl.design.******factory;

/** * 具體產品

* created by carl on 2016/11/19.

*/public

class

bmwextends

car

}

and hongqi.class

package com.weimob.o2o.carl.design.******factory;

/** * created by carl on 2016/11/19.

*/public

class

hongqi

extends

car

}

bmwbike.class

package com.weimob.o2o.carl.design.abstractfactory;

/** * created by carl on 2016/11/22.

*/public

class

bmwbike

implements

bike

}

and hongqibike.class

package com.weimob.o2o.carl.design.abstractfactory;

/** * created by carl on 2016/11/22.

*/public

class

hongqibike

implements

bike

}

3)抽象的工廠

package com.weimob.o2o.carl.design.abstractfactory;

import com.weimob.o2o.carl.design.******factory.car;

/** * created by carl on 2016/11/22.

*/public

inte***ce

factory

4)具體的工廠

bmwfactory.class

package com.weimob.o2o.carl.design.abstractfactory;

import com.weimob.o2o.carl.design.******factory.bmw;

/** * created by carl on 2016/11/22.

*/public

class

bmwfactory

implements

factory

public bmwbike getbike()

}

and hongqifactory.class

package com.weimob.o2o.carl.design.abstractfactory;

import com.weimob.o2o.carl.design.******factory.hongqi;

/** * created by carl on 2016/11/22.

*/public

class

hongqifactory

implements

factory

public hongqibike getbike()

}

5) client

public

class client

}

4、抽象工廠分析1) 主要優點

抽象工廠模式的主要優點如下:

2) 主要缺點

抽象工廠模式的主要缺點如下:

3) 適用場景

在以下情況下可以考慮使用抽象工廠模式:

5、實際應用

在spring專案中,我們用得最多的特性我相信就是spring的ioc容器了。而spring的ioc容器beanfactory就是其中最重要的介面。我們可以看看

beanfactory中的方法,主要包含以下三個方法:

object getbean(string name)

class

> gettype(string name)

string getaliases(string name);

分別是獲取bean的例項,bean的型別以及bean的別名,這就是spring對抽象工廠方法的應用。

建立型設計模式

建立型設計模式對類的建立例項化過程進行抽象,將物件的建立和物件的使用分離。簡單工廠模式 使用頻率4星 工廠方法模式 使用頻率5星 抽象工廠模式 使用頻率5星 建造者模式 使用頻率2星 原型模式 使用頻率3星 單例模式 使用頻率4星 toc 簡單工廠模式將物件建立和物件使用相分離,降低了系統耦合度。優...

建立型設計模式

設計模式分為總的來說分為三大類 建立型模式 五種,工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式 結構型模式 七種,介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式 行為模式 十一種,策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀...

建立型 設計模式

單例 單例項,自我例項化,提供全域性訪問點 工廠 不同型別例項由不同工廠建立,當然也有通過乙個靜態方法建立一種例項或通過傳入引數決定生產的例項 這兩種很明顯不方便擴充套件,需修改 抽象工廠 考慮物件有不同維度 如車有型別和顏色 那麼工廠負責產生一類產品 如工廠產生紅車,白車,黑車 那麼型別上可以通過...