物件模板模式其實就是物件導向程式設計。
假設我們要管理乙個產品,需要有產品的名稱,產品描述,單價,和庫存個數。其次需要兩個方法,乙個用於計算每件產品的稅費是多少,另乙個計算剩餘庫存的總**
首先建立乙個命令列程式。在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...