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>

1.4 单例模式

单例模式是用来确保对一个特殊的类有史以来只有一个对象被创建,所有对这个对象的引用都依赖于这个特殊类的实例。

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
原创粉丝点击