Swift设计模式之装饰模式
来源:互联网 发布:java jdk安装 编辑:程序博客网 时间:2024/06/08 06:19
转自
- Swift设计模式
原文
- Design-Patterns-In-Swift
// 装饰模式// 百度百科:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象// 设计模式分类:结构型模式/** * 咖啡接口 */protocol Coffee { /** 价格 - returns: 价格 */ func getCost() -> Double /** 原料 - returns: 原料 */ func getIngredients() -> String}/// 简单咖啡实现class SimpleCoffee: Coffee { func getCost() -> Double { return 1.0 } func getIngredients() -> String { return "Coffee" }}/// 咖啡装饰接口class CoffeeDecorator: Coffee { private let decoratedCoffee: Coffee private let ingredientSeparator: String = ", " required init(decoratedCoffee: Coffee) { self.decoratedCoffee = decoratedCoffee } func getCost() -> Double { return decoratedCoffee.getCost() } func getIngredients() -> String { return decoratedCoffee.getIngredients() }}/// 牛奶装饰实现class Milk: CoffeeDecorator { required init(decoratedCoffee: Coffee) { super.init(decoratedCoffee: decoratedCoffee) } override func getCost() -> Double { return super.getCost() + 0.5 } override func getIngredients() -> String { return super.getIngredients() + ingredientSeparator + "Milk" }}/// whip装饰实现class WhipCoffee: CoffeeDecorator { required init(decoratedCoffee: Coffee) { super.init(decoratedCoffee: decoratedCoffee) } override func getCost() -> Double { return super.getCost() + 0.7 } override func getIngredients() -> String { return super.getIngredients() + ingredientSeparator + "Whip" }}var someCoffee: Coffee = SimpleCoffee() // 简单咖啡print("Cost : \(someCoffee.getCost()); Ingredients: \(someCoffee.getIngredients())")var milkCoffee = Milk(decoratedCoffee: someCoffee) // 装饰了牛奶的咖啡print("Cost : \(milkCoffee.getCost()); Ingredients: \(milkCoffee.getIngredients())")var whipCoffee = WhipCoffee(decoratedCoffee: milkCoffee) // 装饰了whip和牛奶的咖啡print("Cost : \(whipCoffee.getCost()); Ingredients: \(whipCoffee.getIngredients())")
0 0
- Swift设计模式之装饰模式
- swift设计模式学习 - 装饰模式
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之 装饰模式
- 设计模式之-装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 到底utf-8和unicode是什么关系
- RPC(linux)报错 Cannot register service RPC
- dumpsys 命令
- JDBC
- Android项目开发总结(三)-- 规范篇
- Swift设计模式之装饰模式
- linux pipe 函数( int pipe(int filedes[2]))
- 小米盒子开启ADB调试的方法
- RPC
- 文件I/O与系统编程
- Android开源项目分类汇总【畜生级别】
- Swift设计模式之中介者模式
- Oracle数据库使用nfs挂载的盘执行expdp说明(Linux环境下)
- 有用的网址