日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式学习 - 工厂模式

發(fā)布時(shí)間:2025/4/16 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式学习 - 工厂模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

工廠模式:

定義了一個(gè)創(chuàng)建對(duì)象的接口,但由它的子類決定實(shí)例化哪一個(gè)對(duì)象。工廠方法將對(duì)象的實(shí)例化延遲到了子類。

?

模式組成:

  • 一組使用者:父類定義一個(gè)創(chuàng)建對(duì)象的接口及其他通用接口,子類負(fù)責(zé)創(chuàng)建對(duì)象接口的具體實(shí)現(xiàn)(在案例中為 PizzaStore 及?NYPizzaStore
  • 一組產(chǎn)品類:(在案例中為 抽象Pizza類及其具體實(shí)現(xiàn)的子類)

?

注:

  •   每一個(gè)使用者的子類負(fù)責(zé)創(chuàng)建一個(gè)(組)相似對(duì)象。
  • ?

    UML 類圖:

    ?

    代碼具體實(shí)現(xiàn):

    1、 對(duì)象的創(chuàng)建者: PizzaStore 類

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

    ?

    2、對(duì)象類:

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

    ?

    3、測(cè)試代碼:

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

    ?

    4、測(cè)試結(jié)果

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/ziyeSky/p/4494846.html

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。