《Head First 設計模式》 工廠方法模式

2022-07-08 03:00:12 字數 2802 閱讀 4455

工廠方法模式定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。

ps:在設計模式中,「實現乙個介面」泛指實現某個超型別(可以是類或介面)的某個方法。

要點:

/**

* 產品抽象類

*/public abstract class product

}

(1)產品a1
/**

* 產品a1

*/public class concreteproducta1 extends product

}

(2)產品a2
/**

* 產品a2

*/public class concreteproducta2 extends product

}

(3)產品b1
/**

* 產品b1

*/public class concreteproductb1 extends product

}

(4)產品b2
/**

* 產品b2

*/public class concreteproductb2 extends product

}

建立者一般為需要用到產品的類,需要的產品則通過類中的工廠方法建立。

/**

* 建立者抽象類

*/public abstract class creator

具體的建立者需要實現建立產品的工廠方法。

(1)建立者1

/**

* 建立者1

*/public class concretecreator1 extends creator else if ("b".equals(producttype))

return null;

}}

(2)建立者2
/**

* 建立者2

*/public class concretecreator2 extends creator else if ("b".equals(producttype))

return null;

}}

public class test 

}

假設你有乙個披薩店,**多種型別的披薩:芝士披薩、蛤蜊披薩、素食披薩等。由於經營有成,你打算推廣自己的加盟店。

為了確保加盟店運營的質量,你希望加盟店能夠採用固定的製作流程。但是由於區域的差異,每家加盟店都可能想要提供不同風味的披薩(比如紐約、芝加哥、加州),因此又必須允許加盟店能夠自由地製作該區域的風味。

披薩店子類通過實現建立披薩方法來決定要建立什麼風味的披薩。

(1)建立披薩抽象類

/**

* 披薩抽象類

*/public abstract class pizza

}/**

* 烘烤

*/void bake()

/*** 切片

*/void cut()

/*** 裝盒

*/void box()

public string getname()

}

(2)建立不同風味、不同型別的披薩
/**

* 紐約風味的芝士披薩

*/public class nystylecheesepizza extends pizza

}

/**

* 紐約風味的蛤蜊披薩

*/public class nystyleclampizza extends pizza

}

/**

* 芝加哥風味的芝士披薩

*/public class chicagostylecheesepizza extends pizza

void cut()

}

/**

* 芝加哥風味的蛤蜊披薩

*/public class chicagostyleclampizza extends pizza

void cut()

}

(3)建立披薩店抽象類
/**

* 披薩店抽象類

*/public abstract class pizzastore

/*** 建立披薩(工廠方法)

*/protected abstract pizza createpizza(string type);

}

(4)建立不同風味的披薩店
/**

* 紐約風味披薩店

*/public class nystylepizzastore extends pizzastore else if ("clam".equals(type))

return pizza;

}}

/**

* 芝加哥風味披薩店

*/public class chicagostylepizzastore extends pizzastore else if ("clam".equals(type))

return pizza;

}}

(5)使用不同風味的披薩店訂購披薩
public class test 

}

HeadFirst 設計模式 工廠模式

定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。第一種方式是 class pizzastore public pizza orderpizza string type class pizzafactory pizza pizza null 將pizza這個例項提...

head first設計模式 工廠模式

這裡描述的設計模式,於head first系列,這裡的工廠模式是基於書中披薩店的例子。簡單工廠的設計就是說把所有需要建立的東西放在乙個普通的函式中,以書中披薩的例子來講,假設有一百種披薩,就再函式中全部處理完。當然簡單工廠內部的實現也可以有技巧,常見的就是if或者switch逐個處理,但是如果太多了...

Head First設計模式四 工廠模式

除了使用new操作符之外,還有更多製造物件的方法,比如使用工廠模式封裝例項化的行為。工廠模式在輔助面向介面程式設計時很有作用,它用來封裝物件的建立。本章從簡單工廠開始講起,並逐步深入了解工廠方法 factory method 和抽象工廠模式 abstract factory 從嚴格意義上來說簡單工廠...