日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式学习 - 工厂模式

發布時間:2025/4/16 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式学习 - 工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工廠模式:

定義了一個創建對象的接口,但由它的子類決定實例化哪一個對象。工廠方法將對象的實例化延遲到了子類。

?

模式組成:

  • 一組使用者:父類定義一個創建對象的接口及其他通用接口,子類負責創建對象接口的具體實現(在案例中為 PizzaStore 及?NYPizzaStore
  • 一組產品類:(在案例中為 抽象Pizza類及其具體實現的子類)

?

注:

  •   每一個使用者的子類負責創建一個(組)相似對象。
  • ?

    UML 類圖:

    ?

    代碼具體實現:

    1、 對象的創建者: PizzaStore 類

    // pizza Store 父類:包含了創建pizza(createPizza)這個抽象方法 class PizzaStore {// 包含了一個產品的抽象類 和 一個簡單工廠var pizza:Pizza = Pizza()// 提供 pizza 方法 func orderPizza(pizzatype: Pizzatype) {// 獲取相應商店創建的 pizza 對象的引用self.pizza = createPizza(pizzatype)// 產品的行為 pizza.prepare()pizza.bake()pizza.cut()pizza.box()}// 創建一個 負責創建對象的接口,但是它由實現子類具體實現func createPizza(pizzatype: Pizzatype) -> Pizza {return Pizza()} }// 紐約Pizza商店:負責創建紐約風味的Pizza class NYPizzaStore: PizzaStore {// 具體實現 負責創建對象的接口override func createPizza(pizzatype: Pizzatype) -> Pizza {switch pizzatype {case Pizzatype.Cheese:pizza = NYCheesePizza()case Pizzatype.Clam:pizza = NYClamPizza()}return pizza} }// 芝加哥Pizza商店:負責創建芝加哥風味的Pizza class ChicagoPizzaStore: PizzaStore {// 具體實現 負責創建對象的接口override func createPizza(pizzatype: Pizzatype) -> Pizza {switch pizzatype {case Pizzatype.Cheese:pizza = ChicagoCheesePizza()case Pizzatype.Clam:pizza = ChicagoClamPizza()}return pizza} }

    ?

    2、對象類:

    // 對象的父類 class Pizza {var name:String = ""var dough:String = ""var sauce:String = ""var toppings:[String] = []// 準備pizza 方法 func prepare() {println("正在準備 \(name) ...")println("Tossing dough...")println("加入 \(sauce)...")for topping:String in toppings {println(" \(topping)")}}func box() {println("正在打包...\n")}func bake() {println("正在烘焙...")}func cut() {println("正在裁剪...")} }// 一個紐約風味的 Cheese Pizza; 它與 紐約風味的 Clem Pizza 同為一組 class NYCheesePizza: Pizza {override init() {super.init()self.name = "紐約風味的 Cheese Pizza"self.dough = "Thin Crust Dough"self.sauce = "草莓 醬汁"toppings.append("Grated Reggino Cheese")} }// 一個紐約風味的 Clam Pizza class NYClamPizza: Pizza {override init() {super.init()self.name = "紐約風味的 NYClam Pizza"self.dough = "Low Crust Dough"self.sauce = "櫻桃 醬汁"toppings.append("Grated Reggino Clam")} }// 一個芝加哥風味的 Cheese Pizza; 它與 芝加哥風味的 Clem Pizza 同為一組 class ChicagoCheesePizza: Pizza {override init() {super.init()self.name = "芝加哥風味的 Cheese Pizza"self.dough = "Thin Crust Dough"self.sauce = "芒果 醬汁"toppings.append("Grated Reggino Cheese")}// 子類也可以覆蓋父類的方法override func cut() {println("正在裁剪:裁剪成方塊狀...")} }// 一個芝加哥風味的 Clam Pizza class ChicagoClamPizza: Pizza {override init() {super.init()self.name = "芝加哥風味的 Clam Pizza"self.dough = "Low Crust Dough"self.sauce = "烤肉 醬汁"toppings.append("Grated Reggino Clam")}// 子類也可以覆蓋父類的方法override func cut() {println("正在裁剪:裁剪成方塊狀...")} }

    ?

    3、測試代碼:

    // 先訪問 紐約Pizza商店 var pizzaStore: PizzaStore = NYPizzaStore() // 買一個紐約風味的CheesePizza /* 先調用了 NYPizzaStore 的 orderPizza 方法,再由 orderPizza 方法調用 createPizza 方法; 其中 orderPizza 方法是父類創建的,為子類所共有使用,orderPizza 并不需要知道這個 Pizza 到底是哪一個種類的,只需要知道這是一個 Pizza 能進行準備、裁剪等行為就足夠了 而 createPizza 方法則是子類自己按照相應的情況具體實現去創建相應風味的 Pizza; */ pizzaStore.orderPizza(Pizzatype.Cheese)// 再訪問 芝加哥Pizza商店,買一個芝加哥風味的ClamPizza pizzaStore = ChicagoPizzaStore() pizzaStore.orderPizza(Pizzatype.Clam)

    ?

    4、測試結果

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/ziyeSky/p/4494846.html

    總結

    以上是生活随笔為你收集整理的设计模式学习 - 工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。