設計模式學習 物件模板模式

2021-09-24 06:45:49 字數 2569 閱讀 9326

物件模板模式其實就是物件導向程式設計。

假設我們要管理乙個產品,需要有產品的名稱,產品描述,單價,和庫存個數。其次需要兩個方法,乙個用於計算每件產品的稅費是多少,另乙個計算剩餘庫存的總**

首先建立乙個命令列程式。在main.swift檔案裡初始化下面**

var products = [

("kayak","a boat for one person",275.0,10),

("lifejacket","protective and fashionable",48.95,14),

("soccer ball","fifa-aoorived suze abd weight",19.5,32)

]func

caculatetax

(product:(string,string,double,int)

) -> double

func

caculatestockvalue

(tuples:[(string,string,double,int)

]) -> double)

}print("sales tax for kayak:$\(caculatetax(product: products[0]))")

print("total value of stock:$\(caculatestockvalue(tuples: products))")

複製**

上面**簡單實現了需求,但是可以看到使用元組實現該需求帶來的一些問題,如果給產品增加乙個屬性,那麼連帶修改的地方有很多。而且不易於理解元組中每乙個元素代表什麼

下面我們使用物件模板模式修改上面**,新建product.swift檔案

class

product

}複製**

修改main.swift

var products = [

product(name: "kayak", description: "a boat for one person", price: 275.0, stock: 10),

product(name: "lifejacket", description: "protective and fashionable", price: 48.95, stock: 14),

product(name: "soccer ball", description: "fifa-aoorived suze abd weight", price: 19.5, stock: 32)

]func

caculatetax

(product:product)

-> double

func

caculatestockvalue

(tuples:[product])

-> double)

}print("sales tax for kayak:$\(caculatetax(product: products[0]))")

print("total value of stock:$\(caculatestockvalue(tuples: products))")

複製**

上面修改完成之後,其實已經可以看到的是**的閱讀性明顯提高,一看就知道每乙個引數代表什麼。此時如果我們去除某乙個產品屬性,比如描述description屬性,也不需要修改呼叫者的邏輯。

下面為最終修改

class

product

set}

var stockvalue:double

}init(name:string,price:double,stock:int)

func

calculatetax

(rate:double)

-> double

}複製**

main.swift 的修改

var products = [

product(name: "kayak", price: 275.0, stock: 10),

product(name: "lifejacket", price: 48.95, stock: 14),

product(name: "soccer ball", price: 19.5, stock: 32)

]func

caculatestockvalue

(tuples:[product])

-> double)

}print("sales tax for kayak:$\(products[0].calculatetax(rate: 0.2))")

print("total value of stock:$\(caculatestockvalue(tuples: products))")

products[0].stock = -50

print("stock level for kayak :\(products[0].stock)")

複製**

物件模板的好處和注意點:

示例**在這裡github.com/rockyao/des…

設計模式學習 模板模式

前面的時間學習了5種建立型設計模式和7種結構型設計模式,現在開始學習行為型的設計模式 在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。意圖 定義乙個操作...

物件導向(模板設計模式)

需求 獲取一段程式執行的時間 原理 獲取程式開始和結束時的時間然後相減 方法 system.currenttimemillis 模板方法設計模式 在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分 那麼這時就將不確定的部分暴露出來,由該類的子類完成。abstr...

設計模式學習 模板方法模式

型別 行為模式 模板方法模式定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些 特定步驟。uml圖 新建賽車的父類 package car package public class car parent public void setsp...