設計模式二 工廠模式

2021-10-17 04:32:39 字數 3011 閱讀 9774

大家在開發中應該都使用過或者看到過sqlsessionfactory或者beanfactory,這就是使用工廠模式來生產物件。工廠模式用於封裝和管理物件的建立,分離物件的建立者和呼叫者,實現與物件解耦的目的。

工廠模式可以分為:

簡單工廠通過接收的引數的不同來返回不同的物件例項,涉及到的角色有:

**如下:

// 抽象產品

public

inte***ce

car// 具體產品1

public

class

audi

implements

car}

// 具體產品2

public

class

benz

implements

car}

// 具體工廠,用於生成產品

public

class

******factory

elseif(

"benz"

.equals

(type)

)else

}// 方式2,直接呼叫生成對應的產品物件的方法

public

static car getaudi()

public

static car getbenz()

}// 呼叫者

public

class

******factorytest

}

類圖如下:

可以看到,如果再增加一種產品,則需要修改工廠類,故這種工廠模式適用於產品物件較少,且產品固定的需求 。其實我們在一般的專案中使用簡單工廠就足夠了。

為了避免簡單工廠不滿足開閉原則的缺點,增加產品而不需要去修改工廠類,可以使用工廠方法模式,增加產品的同時通過增加乙個對應的工廠類來生產對應的產品,涉及的角色有:

**如下:

// 抽象產品

public

inte***ce

car// 具體產品1

public

class

audi

implements

car}

// 具體產品2

public

class

benz

implements

car}

// 抽象工廠

public

inte***ce

ca***ctory

// 具體工廠1

public

class

audifactory

implements

ca***ctory

}// 具體工廠2

public

class

benzfactory

implements

ca***ctory

}// 呼叫者

public

class

factorymethodtest

}

類圖如下:

可以看到,如果新增加一種具體產品,就需要為其增加乙個具體工廠類用於生產該產品。

抽象工廠用於生產一族產品。涉及的角色有:

**如下:

// 抽象產品a

public

inte***ce

engine

// 具體產品a1

public

class

highengine

implements

engine

}// 具體產品a2

public

class

lowengine

implements

engine

}// 抽象產品b

public

inte***ce

tyre

// 具體產品b1

public

class

hightyre

implements

tyre

}// 具體產品b2

public

class

lowtyre

implements

tyre

}// 抽象工廠

public

inte***ce

ca***ctory

// 具體工廠a1b1

public

class

highca***ctory

implements

ca***ctory

@override

public hightyre createtyre()

}// 具體工廠a2b2

public

class

lowca***ctory

implements

ca***ctory

@override

public lowtyre createtyre()

}// 呼叫者

public

class

abstractfactorytest

}

類圖如下:

可以看到通過具體工廠a1b1和a2b2可以生產出不同的產品族,在產品固定的情況下,可以通過新增具體工廠類,來組合生成不同的產品族,比如a1b2或者a2b1。但是如果要增加新的產品的話,比如增加產品c,那就需要去修改抽象工廠和具體工廠,就不適合了。

二 設計模式 工廠模式

一.傳統時以pizza類舉例,乙個抽象類pizza,由幾個pizza實現類實現,主餐廳看看客戶點什麼便生產,但是如果需要增加新的pizza品種,則要增加乙個新的實現類,然後主餐廳裡增加對邏輯的判斷,顯然,違背了開放關閉原則。所以 工廠模式為解決某些需要生產大量一批類的問題 二.簡單工廠模式 定義了乙...

設計模式(二)工廠模式

與 模式不同,生產模式隱藏過程,只關注結果 簡單工廠,工廠方法,抽象工廠 一,簡單工廠模式 public inte ce car public class aodi implements car public class baoma implements car public class facto...

設計模式(二) 工廠模式

前言 我在面試的時候,有時候會問到候選人有沒有熟悉的設計模式,一般大部分候選人會選擇說熟悉單例和工廠 也有部分人會說熟悉觀察者 如果我進一步問候選人是如何應用工廠模式的,10個候選人有10個會舉連線sqlserver,oracle,mysql等不同資料庫時會用工廠模式產生不同的連線的例子。omg,我...