Sobes.tech
Junior

რომელი დიზაინის ნიმუშებს იცით?

sobes.tech AI

პასუხი AI-სგან

შექმნადი:

  • Singleton: გარანტიას იძლევა, რომ კლასი ერთეული იქნება და გლობალურ წვდომას უზრუნველყოფს.
  • Factory Method: განსაზღვრავს ობიექტის შექმნის ინტერფეისს, მაგრამ საშუალებას აძლევს ქვესახეებს გადაწყვიტონ, რომელი კლასი უნდა შექმნან.
  • Abstract Factory: უზრუნველყოფს ინტერფეისს დაკავშირებული ან დამოკიდებული ობიექტების ოჯახების შექმნისთვის, მათი კონკრეტული კლასების მითითების გარეშე.
  • Builder: ნაწილებად აყოფს რთული ობიექტის კონსტრუქციას, საშუალებას აძლევს შექმნას სხვადასხვა წარმოდგენები ერთსა და იმავე კონსტრუქციის პროცესით.
  • Prototype: ქმნის ობიექტებს არსებული ნიმუშის დუბლირებით, ნაცვლად კონსტრუქციის პროცესის თავიდან შესრულებისა.

სტრუქტურული:

  • Adapter: გარდაქმნის ერთი კლასის ინტერფეისს სხვა ინტერფეისად, რომელიც მომხმარებლებს ელიან. საშუალებას აძლევს შეუთავსებელ ინტერფეისებს მუშაობა.
  • Bridge: განცალკევებს აბსტრაქციას მისი რეალიზაციიდან, მათ დამოუკიდებლად ცვლილების საშუალებას აძლევს.
  • Composite: აერთიანებს ობიექტებს ხის სტრუქტურებში, რათა წარმოადგინოს "პატივი-ყველა" იერარქიები. საშუალებას აძლევს მომხმარებლებს ერთგვაროვნად მუშაობა ინდივიდუალურ ობიექტებთან და კომპოზიციებთან.
  • Decorator: დინამიურად აძლიერებს ობიექტს ახალი პასუხისმგებლობებით, მას სპეციალურ დეკორატორულ ობიექტში ჩასმით.
  • Facade: უზრუნველყოფს ერთიან ინტერფეისს სუბსისტემის ინტერფეისების ნაკრებისთვის. განსაზღვრავს მაღალ დონეზე ინტერფეისს, რომელიც ამარტივებს სუბსისტემის გამოყენებას.
  • Flyweight: იყენებს გაზიარებულ მდგომარეობას მცირე ობიექტებს შორის, რათა შეამციროს მეხსიერების მოხმარება და გაზარდოს შესრულება.
  • Proxy: უზრუნველყოფს ობიექტის შემცვლელს, რომელიც მართავს წვდომას ორიგინალ ობიექტზე.

მოწყობის:

  • Chain of Responsibility: გადმოსცემს მოთხოვნას პასუხისმგებლობის ჯაჭვში. თითოეული პასუხისმგებელი გადაწყვეტს, უნდა თუ არა მოთხოვნის დამუშავება ან გადაცემა შემდეგს.
  • Command: ინკაფსულირებს მოთხოვნას როგორც ობიექტს, რაც საშუალებას აძლევს სხვადასხვა მომხმარებლებს პარამეტრიზება, რიგში დაყენება ან ლოგში ჩაწერა.
  • Interpreter: განსაზღვრავს ენის გრამატიკულ წარმოდგენას და მოიცავს ინტერპრეტატორს, რათა ინტერპრეტაცია მოხდეს.
  • Iterator: უზრუნველყოფს მეთოდს, რომლითაც შესაძლებელია წვდომა ყველა ელემენტზე, არ გამჟღავნოს მისი შიდა წარმოდგენა.
  • Mediator: განსაზღვრავს ობიექტებს, რომლებიც მართავენ სხვა ობიექტების ურთიერთქმედებას. ხელს უწყობს სუსტი კავშირების შექმნას, რაც საშუალებას აძლევს ობიექტებს ურთიერთქმედონ უშუალოდ, გარეშე პირდაპირი კავშირის.
  • Memento: უზრუნველყოფს შესაძლებლობას შეინახოს და აღადგინოს ობიექტის შიდა მდგომარეობა, ინკაფსულაციის დარღვევის გარეშე.
  • Observer: განსაზღვრავს "ერთი-მრავალი" დამოკიდებულებას ობიექტებს შორის, რათა როდესაც ერთი ობიექტის მდგომარეობა იცვლება, ყველა დამოკიდებული ობიექტი იუწყება და ავტომატურად განახლდება.
  • State: საშუალებას აძლევს ობიექტს შეცვალოს თავისი ქცევა მისი შიდა მდგომარეობის მიხედვით. თითოეული მდგომარეობა ინკაფსულირებულია ცალკეულ კლასში.
  • Strategy: განსაზღვრავს ალგორითმების ოჯახს, ინკაფსულირებს თითოეულს და ხდის მათ ურთიერთგამომრიცხველს. საშუალებას აძლევს აირჩიოს ალგორითმი შესრულების დროს.
  • Template Method: განსაზღვრავს ალგორითმის ჩარჩოს ოპერაციაში, გადადებს გარკვეულ ნაბიჯებს ქვესახეებისთვის. საშუალებას აძლევს ქვესახეებს განსაზღვრონ ალგორითმის ნაბიჯები ცვლილების გარეშე.
  • Visitor: წარმოადგენს ოპერაციას, რომელიც უნდა შესრულდეს ობიექტების სტრუქტურის ელემენტებზე. საშუალებას აძლევს განსაზღვროს ახალი ოპერაცია, არ შეცვალოს ელემენტების კლასები, რომლებზე მუშაობს.

iOS განვითარების დროსაც ხშირად გამოიყენება:

  • Model-View-Controller (MVC): არქიტექტურული ნიმუში, რომელიც იყოფა სამ დაკავშირებულ კომპონენტად: მოდელი (მონაცემები და ბიზნეს-ლოგიკა), ხედვა (მომხმარებლის ინტერფეისი) და კონტროლერი (მოდელისა და ხედვის შორის კავშირი).
  • Delegate: საშუალებას აძლევს ერთ ობიექტს მოქმედოს სახელით ან კოორდინიროს სხვა ობიექტის მოქმედებები.
  • Observer (NotificationCenter): შეტყობინებების გაგზავნის სისტემა, რომელიც საშუალებას აძლევს ობიექტებს მიიღონ შეტყობინებები უშუალო კავშირის გარეშე.
  • Target-Action: მექანიზმი, რომელიც გამოიყენება შეტყობინებების გაგზავნისთვის მართვის ელემენტებიდან (მაგალითად, ღილაკებიდან) მიზნობრივ ობიექტზე.
  • Coordinator: ნავიგაციის ნაკადების მართვის ნიმუში, რომელიც გამოყოფს ნავიგაციის ლოგიკას კონტროლერებიდან.
  • Dependency Injection: ნიმუში, სადაც ობიექტის დამოკიდებულებები ინექცირებულია გარედან, ნაცვლად იმისა, რომ თავად შექმნას.
// Singleton-ის მაგალითი
class SettingsManager {
    static let shared = SettingsManager() // ერთი მაგალითი

    private init() {
        // პირადი ინიციალიზატორი, რათა თავიდან აიცილოს გარედან შექმნა
    }

    var appVersion: String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "უცნობია"
    }
}

// გამოყენება
let settings = SettingsManager.shared
print("აპლიკაციის ვერსია: \(settings.appVersion)")
// Delegate-ის მაგალითი (სადაცაა)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Delegate თვისება

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        delegate?.buttonWasTapped(self) // Delegate მეთოდის გამოძახება
    }
}

class ViewController: UIViewController, ButtonDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
        myButton.setTitle("დაწკაპუნეთ", for: .normal)
        myButton.backgroundColor = .blue
        myButton.delegate = self // დელეგატის დაყენება
        view.addSubview(myButton)
    }

    func buttonWasTapped(_ button: UIButton) {
        print("ბატონი დაწკაპულია ViewController-ში")
    }
}