文章来自:cocochina
/*
第一种通过类的门面模式
*/
class Dish: CustomStringConvertible {
var name: String ;
var price: Int ;
init(name: String, price: Int) {
self.name = name;
self.price = price;
}
var description: String{
get {
return "\(name): \(price)元"
}
}
}
class DishOrder{
func append(dash:Dish){
}
func total() -> Int {
return 1;
}
}
class SaltDishDecorator: Dish {
init(dish: Dish) {
super.init(name: "加糖 \(dish.name)", price: dish.price + 1)
}
}
/*
通过协议 扩展组合模式
*/
protocol Product {
var name: String {get set}
var price: Int {get set}
}
protocol Salteable: Product {
func salted() -> Self
}
extension Salteable{
func salted() -> Self {
var newProduct = self ;
newProduct.name = "加盐\(name)" ;
newProduct.price = price + 1 ;
return newProduct ;
}
}
struct Snack: CustomStringConvertible {
var name: String ;
var price: Int ;
init(name: String, price: Int) {
self.name = name ;
self.price = price ;
}
var description: String{
get{
return "\(name): \(price)元"
}
}
}
extension Snack: Salteable{
}
最后的结果更优雅