設計模式 工廠模式

2021-10-11 21:01:06 字數 3984 閱讀 9541

factory design pattern 工廠模式

工廠模式分類:

披薩生產和銷售的專案:

披薩的種類 greekpizz、cheesepiz等

披薩的製作過程有 prepare、bake、cut、box

完成披薩店訂購功能

思路分析(類圖)

//披薩抽象類

public

abstract

class

pizza

public string getname()

//準備方法

public

abstract

void

prepare()

;//烘培

public

void

bake()

//切割

public

void

cut(

)//打包

public

void

box()}

//乳酪披薩

public

class

cheesepizza

extends

pizza

}//希臘披薩

public

class

greekpizza

extends

pizza

}//中國披薩

public

class

cheesepizza

extends

pizza

}//披薩訂單類

public

class

orderpizza

catch

(ioexception e)

return ordertype;

}public

orderpizza()

if(pizza != null)

}while

(true);

}}

分析

//1.新增pizza類

public

class

pepperpizza

extends

pizza

}//2.在訂單orderpizza的switch語句中增加新的判斷

case

"pepper"

: pizza =

newpepperpizza()

; pizza.

setname

(" 胡椒披薩 ");

break

;

改進思路

把建立pizza物件封裝到乙個類中,這樣我們有新的pizza型別時,只需要修改該類就可,其他有建立到pizza物件的**就不需要修改了。

基本介紹

工廠模式的類圖

//簡單工廠類

public

class

******factory

elseif(

"cheese"

.equals

(ordertype)

)elseif(

"pepper"

.equals

(ordertype)

)else

return pizza;}}

//披薩訂單類

public

class

orderpizza

/** * 獲取pizza種類

** @return

*/private string getordertype()

catch

(ioexception e)

return ordertype;

}public

void

setfactory

(******factory ******factory)

else

}while

(true);

}}

分析

基本介紹

工廠方法模式類圖

//抽象披薩訂單

public

abstract

class

abstractorderpizza

catch

(ioexception e)

}// 構造器

public

abstractorderpizza()

while

(true);

}}//北京工廠

public

class

bjorderpizzafactory

extends

abstractorderpizza

else

if(ordertype.

equals

("pepper"))

// todo auto-generated method stub

return pizza;}}

//倫敦工廠

public

class

ldpizzafactory

extends

abstractorderpizza

else

if(ordertype.

equals

("pepper"))

// todo auto-generated method stub

return pizza;}}

//披薩店使用

public

class

pizzastore

else

}}

分析

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現產品類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷轉移到了客戶端**來進行。

基本介紹

抽象工廠模式類圖

//乙個抽象工廠模式的抽象層(介面)

public

inte***ce

absfactory

//這是工廠子類

public

class

bjfactory

implements

absfactory

else

if(ordertype.

equals

("pepper"))

return pizza;}}

public

class

ldfactory

implements

absfactory

else

if(ordertype.

equals

("pepper"))

return pizza;}}

public

class

orderpizza

private

void

setfactory

(absfactory factory)

else

}while

(true);

}// 寫乙個方法,可以獲取客戶希望訂購的披薩種類

private string gettype()

catch

(ioexception e)

}}

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...