swift语言设计模式介绍-创建型模式
来源:互联网 发布:sql实例名称无效 编辑:程序博客网 时间:2024/06/07 10:30
创建型模式
在软件工程中,创建型设计模式是用来处理对象创建的机制,对特定的情况采用合适的方式。基本形式的对象初始化可能在设计上会产生一些问题,或者增加设计的复杂度。创建型设计模式就是通过控制对象的创建方式来解决这个问题。
1.1 抽象工厂模式
抽象工厂模式是用来提供一系列相关或者独立的类,这个类簇中具体哪个类需要实例化留到运行时决定,也就是留给子类决定。
// Protocols.protocol Decimal { func stringValue() -> String}protocol NumberFactoryProtocol { func numberFromString(string : String) -> Decimal}// Number implementations.struct NextStepNumber : Decimal { private var nextStepNumber : NSNumber func stringValue() -> String { return nextStepNumber.stringValue }}struct SwiftNumber : Decimal { private var swiftInt : Int func stringValue() -> String { return "\(swiftInt)" }}// Factories.class NextStepNumberFactory : NumberFactoryProtocol { func numberFromString(string : String) -> Decimal { return NextStepNumber(nextStepNumber:NSNumber(longLong:(string as NSString).longLongValue)) }}class SwiftNumberFactory : NumberFactoryProtocol { func numberFromString(string : String) -> Decimal { return SwiftNumber(swiftInt:(string as NSString).integerValue) }}// Abstract factory.enum NumberType { case NextStep, Swift}class NumberAbstractFactory { class func numberFactoryType(type : NumberType) -> NumberFactoryProtocol { switch type { case .NextStep: return NextStepNumberFactory() case .Swift: return SwiftNumberFactory() } }}
let factoryOne = NumberAbstractFactory.numberFactoryType(.NextStep)let numberOne = factoryOne.numberFromString("1")numberOne.stringValue()let factoryTwo = NumberAbstractFactory.numberFactoryType(.Swift)let numberTwo = factoryTwo.numberFromString("2")numberTwo.stringValue()
1.2 创建者模式
创建者模式是用来创建一些复杂的类,它们的组成部分有相同的初始化顺序或者通过特定的算法。而这个创建的算法通过外部类控制。
protocol ThreeDimensions { var x: Double? {get} var y: Double? {get} var z: Double? {get}}class Point : ThreeDimensions { var x: Double? var y: Double? var z: Double? typealias PointBuilderClosure = (Point) -> () init(buildClosure: PointBuilderClosure) { buildClosure(self) }}
let fancyPoint = Point { point in point.x = 0.1 point.y = 0.2 point.z = 0.3}fancyPoint.xfancyPoint.yfancyPoint.z
let uglierPoint = Point { $0.x = 0.1 $0.y = 0.2 $0.z = 0.3}
1.3 原型模式
原型模式是用来通过拷贝一个已存在类的所有特性来实例化一个新的对象,也就是创建一个独立的拷贝。这种方法对那些初始化低效的对象的创建很有帮助。
class ThieveryCorporationPersonDisplay { var name: String? let font: String init(font: String) { self.font = font } func clone() -> ThieveryCorporationPersonDisplay { return ThieveryCorporationPersonDisplay(font:self.font) }}
let Prototype = ThieveryCorporationPersonDisplay(font:"Ubuntu")let Philippe = Prototype.clone()Philippe.name = "Philippe"let Christoph = Prototype.clone()Christoph.name = "Christoph"let Eduardo = Prototype.clone()Eduardo.name = "Eduardo"<span style="color:#ff4647;"></span>
单例模式是用来确保对一个特殊的类有史以来只有一个对象被创建,所有对这个对象的引用都依赖于这个特殊类的实例。
class SingletonClass { class var shared : SingletonClass { struct Static { static let instance : SingletonClass = SingletonClass() } return Static.instance }}
let instance = SingletonClass.shared
文章翻译自github项目,地址如下:
https://github.com/ochococo/Design-Patterns-In-Swift#creational点击打开链接
0 0
- swift语言设计模式介绍-创建型模式
- swift语言设计模式介绍-行为型模式
- java语言实现创建型设计模式—创建者模式
- 设计模式-创建型模式
- [设计模式]--创建型模式
- 设计模式--创建型模式
- 设计模式---创建型模式
- [设计模式] - 创建型模式
- 设计模式:创建型模式
- 设计模式:创建型模式
- 设计模式---创建型模式
- 设计模式---创建型模式
- 设计模式---创建型模式
- 【设计模式】创建型模式
- 设计模式-创建型模式
- 设计模式-创建型模式
- [设计模式]创建型模式
- 设计模式---创建型模式
- 问题相关
- 四个开源商业智能平台比较(五)
- 可以捕获报错的sql语句的触发器
- [Leetcode]Linked List Cycle II
- webview loadUrl() 弹出系统浏览器解决办法
- swift语言设计模式介绍-创建型模式
- selenium验证页面元素
- C++ 中可确定的内置类型的大小关系
- [Leetcode]Merge Two Sorted Lists
- Mac如何正确的卸载程序
- 快速排序(分治法实现的随机化版本)
- Android 的MVC
- JAVA 布局
- java 调用存储过程-oracle