4 工廠模式

2021-10-10 02:40:41 字數 3336 閱讀 2593

舉例:製作不同口味的披薩(榴蓮、火腿兩種口味);不同口味的披薩製作的過程是不一樣的。

product:抽象產品的生產過程(pizza類);

concreteproduct:繼承product,實現了製作過程(hampizza 、durianpizza )

factory:返回客戶購買的披薩;

/**

* 定義披薩建立過程

*/public abstract class pizza

}/**

* 實現製作火腿披薩

*/public class hampizza extends pizza

}/**

* 實現製作榴蓮披薩

*/public class durianpizza extends pizza

}/**

* 工廠類,根據客戶的引數給客戶返回披薩

*/public class pizzafactory else if (type.equals(ham))

throw new runtimeexception("沒有這種披薩");

}}/**

* 購買披薩

*/public class client

}

總結簡單工廠模式:使用者只需要傳入所需要的的引數,返回對應的實體,使用者不需要關心具體的建造過程。

示例**結構非常的簡單,在實際業務中,盡量把業務過程和返回的例項物件解耦開,做到單一原則。就是說,對於披薩這個產品來說,披薩的屬性(如重量和**)單獨寫乙個類,披薩的製作過程單獨寫乙個類,製作過程只需要聚合披薩產品就可以了。

舉例:製作不同口味的披薩(榴蓮、火腿兩種口味);不同口味的披薩製作的過程是不一樣的。

product:抽象產品的生產過程(pizza類);

concreteproduct:繼承product,實現了製作過程(hampizza 、durianpizza )

factory:抽象工廠類,返回客戶購買的披薩;

concretefactory:具體的實現類。

對比簡單工廠

區別在於:

簡單工廠的工廠類沒有做抽象,如果工廠方法中發生修改,會影響前面的業務;

工廠方法模式中,將工廠類抽象了出來,並且將建立披薩的過程交給子類去實現,抽象工廠中只需要定義建立方法就行;

**就是將上面簡單工廠**中的factroy類抽象一下,再去實現這個factory類,在具體的實現類中做建立披薩。
舉例:在上圖中,使用者可能是需要某種顏色(color)或者某個形狀(shape),他倆之間其實是沒有任何的關係的,但是可以封裝在乙個工廠模式中。而color、shape就形成了兩個工廠簇。

上面說明

shape:圖形抽象類,子類實現具體的形狀。

color:顏色抽象類,子類實現具體顏色。

abstractfactory:工廠抽象類,類中定義了兩個方法,分別生成shape和color。

shapefactory:繼承abstractfactory,實現建立shape的方法,至於建立color的方法不需要去實現。

colo***ctory:繼承abstractfactory,實現建立color的方法,至於建立shape的方法不需要去實現。

factoryproducer:返回factory,根據傳入引數判斷是返回shapefactory還是colo***ctory。

使用者拿到返回具體的factory後再傳入引數拿到具體的shape或者color。

步驟 1

為形狀建立乙個介面。

public inte***ce shape

步驟 2

建立實現介面的實體類。

public class rectangle implements shape

}public class square implements shape

}public class circle implements shape

}步驟 3

為顏色建立乙個介面。

public inte***ce color

步驟4建立實現介面的實體類。

public class red implements color

}public class green implements color

}public class blue implements color

}步驟 5

為 color 和 shape 物件建立抽象類來獲取工廠。

public abstract class abstractfactory

步驟 6

建立擴充套件了 abstractfactory 的工廠類,基於給定的資訊生成實體類的物件。

public class shapefactory extends abstractfactory

if(shapetype.equalsignorecase("circle")) else if(shapetype.equalsignorecase("rectangle")) else if(shapetype.equalsignorecase("square"))

return null;

}@override

public color getcolor(string color)

}public class colo***ctory extends abstractfactory

@override

public color getcolor(string color)

if(color.equalsignorecase("red")) else if(color.equalsignorecase("green")) else if(color.equalsignorecase("blue"))

return null;

}}步驟 7

建立乙個工廠創造器/生成器類,通過傳遞形狀或顏色資訊來獲取工廠。

public class factoryproducer else if(choice.equalsignorecase("color"))

return null;

}}步驟 8

使用 factoryproducer 來獲取 abstractfactory,通過傳遞型別資訊來獲取實體類的物件。

public class abstractfactorypatterndemo

}

工廠模式(工廠模式4)

工廠模式 工廠模式 相對於簡單工廠模式,我們要再建乙個工廠介面,對於其他要實現的的類都實現這個介面,建立乙個實現類的工廠 public class audica ctory implements ca ctory 通過這個實現類工廠來建立我們要的實現類 新增工廠實現類,方便新增新的類,如果要建立乙個...

4 工廠模式

head first design patterns master src headfirst designpatterns factory 案例 新建披薩類 將變化的地方進行封裝。簡單工廠不是乙個 真正的 模式,更像是一種程式設計習慣。所有工廠模式都用來封裝物件的建立。工廠方法模式通過讓子類決定該...

4 工廠模式

當使用 new 時,是在例項化乙個具體類,用的是實現不是介面。爭對介面程式設計,可以隔離掉以後系統可能發生的一大堆改變。工廠 factory 處理建立物件的細節。並將這樣的行為封裝在子類中。通過讓子類決定該建立的物件是什麼,來達到物件建立的過程封裝的目的 工廠方法讓類把例項化推遲到子類。靜態方法 不...