İçeriğe geç

Abstract Factory Pattern

Merhabalar bu yazımda Abstract Factory tasarım kalıbının kullanımını göreceğiz.

Abstract Factory (Soyut Fabrika) tasarım deseni bir önceki yazımda bahsettiğim Factory tasarım kalıbının farklı bir halidir. Oldukça fazla kullanılan ve popüler bir tasarım desenidir.

Abstract Factory deseni farklı ürünlerin aynı anda kullanılması gerektiğinde oldukça etkilidir. Yanı uygulama içerisinde hem Mysql hemde CoreData birlikte kullanmamız gereken durumlarda bir birinden farklı ancak ortak yanları olan işlemler gerçekleşeceği için iki farklı soyut nesneyi tek elden kontrol edip üretmek oldukça mantıklı bir işlem olacaktır. Böylelikle karmaşıklık azaltılmış olur.

Aşağıda yazdığım örneği inceleyebilirsiniz. Gördüğünüz gibi soyutlama işlemi yapılarak iki farklı nesne aynı fabrikada üretilebilir.

protocol Server {
    func connect()
}

class Mysql: Server {
    func connect() {
        print("Connected Mysql.")
    }
}

class MangoDb: Server {
    func connect() {
        print("Connected MangoDB.")
    }
}


protocol Decode {
    func decode()
}

class JSON: Decode {
    func decode() {
        print("JSON Decode")
    }
}

class XML: Decode {
    func decode() {
        print("XML Decode")
    }
}

protocol AbstractFactory {
    func getConnect(type:String) -> Server?
    func getDecode(type:String) -> Decode?
}


class Factory: AbstractFactory {
    
    
    func getConnect(type: String) -> Server? {
        if type == "mysql" {
            return Mysql()
        } else if type == "mango" {
            return MangoDb()
        } else {
            return nil
        }
    }
    
    func getDecode(type: String) -> Decode? {
        if type == "json" {
            return JSON()
        } else if type == "xml" {
            return XML()
        } else {
            return nil
        }
    }
    
}

let factory = Factory()

let server = factory.getConnect(type: "mysql")
let decode = factory.getDecode(type: "json")

server?.connect()
decode?.decode()

 

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca