Design Patterns: Strategizing with Swift Programming Language
Swift programlama dili, iOS ve macOS uygulamalarını geliştirmek için optimize edilmiş bir dil olarak günümüzde çok popüler. Ancak, Swift kod yazarken strateji seçme yeteneğinizi de geliştirmenize yardımcı olabilir. Bu yazıda, Swift Programlama Dili’nde tasarlanan desenleri nasıl kullanabileceğinizi göreceksiniz.
Tasarım modelleri, kodu daha okunabilir, daha anlaşılır ve daha kolay modifiye edilebilir hale getirmek için kullanılan farklı yaklaşımlardır. Tasarım modelleri, kodu tekrar kullanmak ve anlaşılmasını kolaylaştırmak için kullanılır. Örneğin, Singleton Tasarım Deseni, nesnelerin tek bir örneğinin sağlanmasını sağlamak için kullanılır.
Swift programlama dili, tasarım modellerini kullanmanıza ve kodunuzu daha temiz ve anlaşılır hale getirmenize yardımcı olacak birkaç pratik araç sunar. Bunlar arasında en önemlileri Strateji, Komut ve Kapsayıcı Tasarım Modelleridir.
Strateji Tasarım Deseni
Strateji Tasarım Deseni, istemcilerin farklı algoritmalar arasında seçim yapmasına olanak sağlayan bir tasarım modelidir. Strateji deseni, özellikle, birden fazla sonuç için farklı algoritmaların kullanılması durumunda oldukça faydalıdır.
Örneğin, bir iOS uygulamasında kullanıcıların bir işlemi gerçekleştirmesi için birden çok seçenek sunabilirsiniz. Her seçenek, farklı bir algoritmaya dayanacak şekilde tasarlanabilir. Bu durumda, Strateji Tasarım Deseni, kullanıcıların seçenekler arasında kolayca geçiş yapabilmelerini sağlayacaktır.
Aşağıdaki kod örneğinde, Strateji Tasarım Deseni, kullanıcı tarafından seçilen seçeneğe bağlı olarak farklı algoritmaların kullanılmasını sağlar.
enum Strategy {
case add
case multiply
}
protocol StrategyProtocol {
func calculate(firstNumber: Int, secondNumber: Int) -> Int
}
class AddStrategy: StrategyProtocol {
func calculate(firstNumber: Int, secondNumber: Int) -> Int {
return firstNumber + secondNumber
}
}
class MultiplyStrategy: StrategyProtocol {
func calculate(firstNumber: Int, secondNumber: Int) -> Int {
return firstNumber * secondNumber
}
}
class Calculator {
private let strategy: StrategyProtocol
init(_ strategy: Strategy) {
switch strategy {
case .add:
self.strategy = AddStrategy()
case .multiply:
self.strategy = MultiplyStrategy()
}
}
func execute(firstNumber: Int, secondNumber: Int) -> Int {
return self.strategy.calculate(firstNumber: firstNumber, secondNumber: secondNumber)
}
}
let calculator = Calculator(.add)
let result = calculator.execute(firstNumber: 2, secondNumber: 3) // 5
Kodun üst kısmında, seçeneklerin listelendiği bir enum oluşturulmuştur. Ardından, her seçeneğe karşılık gelen bir protokol oluşturulmuştur. Protokol, farklı algoritmaların nasıl uygulanacağını tanımlayan bir sözleşmedir. Son olarak, Calculator sınıfı, seçenekleri uygulamak için kullanılan bir algoritma belirlemek için kullanılır.
Komut Tasarım Modeli
Komut Tasarım Modeli, uygulamanızda komutların nasıl işleneceğini tanımlamak için kullanılabilecek bir tasarım modelidir. Komut Tasarım Deseni, komutlarınızın daha esnek ve kolayca test edilebilir hale gelmesine yardımcı olur.
Aşağıdaki kod örneğinde, Komut Tasarım Deseni, bir komutun çalıştırılmasını sağlar.
protocol Command {
func execute()
}
class PrintCommand: Command {
func execute() {
print("Printing...")
}
}
class CommandInvoker {
private let command: Command
init(command: Command) {
self.command = command
}
func invoke() {
command.execute()
}
}
let printCommand = PrintCommand()
let commandInvoker = CommandInvoker(command: printCommand)
commandInvoker.invoke() // Printing...
Kodun üst kısmında, Command protokolü oluşturulmuştur. Ardından, komutun nasıl çalışacağını tanımlayan bir sınıf oluşturulmuştur. Son olarak, CommandInvoker sınıfı, komutu çalıştırmak için kullanılır.
Kapsayıcı Tasarım Modeli
Kapsayıcı Tasarım Modeli, bir araya gelmiş bir kümeyi temsil etmek için kullanılır. Kapsayıcı Tasarım Deseni, tüm nesneleri bir arada tutmak ve kolayca erişilebilir hale getirmek için kullanılır.
Aşağıdaki kod örneğinde, Kapsayıcı Tasarım Deseni, bir küme içerisindeki nesnelerin kolayca erişilebilir hale getirilmesini sağlar.
class Container {
private var items = [String]()
func addItem(item: String) {
items.append(item)
}
func removeItem(item: String) {
if let index = items.index(of: item) {
items.remove(at: index)
}
}
func getItemAtIndex(index: Int) -> String? {
if index >= 0 && index < items.count {
return items[index]
}
return nil
}
}
let container = Container()
container.addItem(item: "Apple")
container.addItem(item: "Banana")
if let item = container.getItemAtIndex(index: 1) {
print(item) // Banana
}
Kodun üst kısmında, Container sınıfı oluşturulmuştur. Bu sınıf, nesneleri bir araya toplamak için kullanılır. Ardından, nesneleri eklemek ve silmek için fonksiyonlar oluşturulmuştur. Son olarak, nesnelerin kolayca erişilebilir hale getirilmesini sağlayan bir fonksiyon oluşturulmuştur.
Sonuç
Swift programlama dili, iOS ve macOS uygulamalarını geliştirmek için çok popüler hale gelmiştir. Ancak, Swift kod yazarken tasarım modellerini kullanarak stratejilerinizi geliştirebilirsiniz. Bu yazıda, Strateji, Komut ve Kapsayıcı Tasarım Modellerinin Swift Programlama Dili’nde nasıl kullanılabileceğini öğrendiniz.
Kod yazarken, bu tasarım modellerinin kullanımı, kodunuzu daha okunabilir, anlaşılır ve modifiye edilebilir hale getirmenize yardımcı olur. Böylece, kodunuzu daha verimli hale getirebilir ve zaman kazanabilirsiniz.