工廠模式應該算是很常用的一種設計模式了,常用做法就是將例項化物件**提取出來,放到乙個類中統一管理和維護,達到和主專案的依賴關係解耦,從而提高專案的擴充套件和維護性。總的來說包含三種實現方式:簡單工場模式、工廠方法模式、抽象工廠模式。
假設現在有這樣乙個需求:訂購乙個披薩,披薩的種類很多,比如 greekpizza 、 cheesepizza 等,而披薩的製作有 prepare、bake、cut、box這幾個操作。
類圖。
核心**。
package com.atguigu.factory.******factory.pizzastore.order;
import com.atguigu.factory.******factory.pizzastore.pizza.cheesepizza;
import com.atguigu.factory.******factory.pizzastore.pizza.greekpizza;
import com.atguigu.factory.******factory.pizzastore.pizza.pepperpizza;
import com.atguigu.factory.******factory.pizzastore.pizza.pizza;
//簡單工廠類
public
class
******factory
else
if(ordertype.
equals
("cheese"))
else
if(ordertype.
equals
("pepper"))
return pizza;
}// 簡單工廠模式 也叫 靜態工廠模式
public
static pizza createpizza2
(string ordertype)
else
if(ordertype.
equals
("cheese"))
else
if(ordertype.
equals
("pepper"))
return pizza;
}}
測試結果。
在上面需求得基礎上增加新的需求:客戶在點披薩的時候,可以點不同口味的披薩,比如北京的乳酪披薩、北京的胡椒披薩或倫敦的乳酪披薩、倫敦的胡椒披薩。
類圖。
核心**。
package com.atguigu.factory.factorymethod.pizzastore.pizza;
//將pizza 類做成抽象
public
abstract
class
pizza
public
void
cut(
)// 打包
public
void
box(
)public
void
setname
(string name)
}
核心思想:定義乙個建立物件的抽象方法,由子類決定要例項化的類。
測試結果。
假設需求和上一步的一樣。
類圖。
核心**。
import com.atguigu.factory.absfactory.pizzastore.pizza.ldcheesepizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.ldpepperpizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.pizza;
public
class
ldfactory
implements
absfactory
else
if(ordertype.
equals
("pepper"))
return pizza;
}}
核心思想:從設計層面看,抽象工廠模式就是對簡單工廠模式的改進,將工廠抽象成兩層(absfactory和具體實現的工廠子類)。
測試結果。
附:
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...