أنماط التصميم في Swift: تقنيات متقدمة وأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أنماط التصميم المتقدمة في Swift: من النظرية إلى التطبيق

أنماط التصميم ليست مجرد مفاهيم نظرية، بل هي حلول مجربة عبر الزمن للمشكلات النمطية. إذا كنت قد أتقنت بالفعل الأنماط الأساسية (Singleton, Delegate, MVC) وتعمل على تطبيقات iOS/macOS معقدة، فقد حان الوقت للانتقال إلى المستوى التالي. في هذه المقالة، سنشرح أربعة أنماط متقدمة: Builder، Strategy، Observer (عبر Combine) و Coordinator. سيتم توضيح كل نمط بكود حقيقي بلغة Swift ونصائح لدمجه في المشاريع القائمة.



1. Builder — إعداد مرن للكائنات المعقدة

نمط Builder مثالي لإنشاء كائنات تحتوي على العديد من المعاملات الاختيارية. بدلاً من استخدام أدوات التهيئة الطويلة ذات العشرات من المعاملات، يمكنك استخدام البناء التدريجي.

مثال: إعداد UIAlertController

class AlertBuilder {    private var title: String?    private var message: String?    private var actions: [UIAlertAction] = []    private var preferredStyle: UIAlertController.Style = .alert

func setTitle(_ title: String) -> AlertBuilder { self.title = title return self }

func setMessage(_ message: String) -> AlertBuilder { self.message = message return self }

func addAction(title: String, style: UIAlertAction.Style = .default, handler: ((UIAlertAction) -> Void)? = nil) -> AlertBuilder { let action = UIAlertAction(title: title, style: style, handler: handler) actions.append(action) return self }

func setStyle(_ style: UIAlertController.Style) -> AlertBuilder { self.preferredStyle = style return self }

func build() -> UIAlertController { let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle) actions.forEach { alert.addAction($0) } return alert }}

// الاستخدامlet alert = AlertBuilder() .setTitle("خطأ") .setMessage("فشل تحميل البيانات") .addAction(title: "موافق", style: .default) .addAction(title: "إعادة المحاولة", style: .cancel) .build()present(alert, animated: true)

متى تستخدم: عند إنشاء أدوات التهيئة، أو ViewControllers المعقدة، أو نماذج البيانات التي تحتوي على عدد كبير من الخيارات.



2. Strategy — تبديل الخوارزميات أثناء التشغيل

نمط Strategy يسمح بتجميع مجموعة من الخوارزميات وجعلها قابلة للتبادل. هذا مفيد بشكل خاص لمعالجة المدفوعات، أو التحقق من صحة البيانات، أو التقديم.

مثال: نظام تصفية المحتوى

protocol FilterStrategy {    func apply(to items: [String]) -> [String]}

class AlphabeticalFilter: FilterStrategy { func apply(to items: [String]) -> [String] { return items.sorted() }}

class LengthFilter: FilterStrategy { func apply(to items: [String]) -> [String] { return items.filter { $0.count > 5 } }}

class ContentManager { private var strategy: FilterStrategy

init(strategy: FilterStrategy) { self.strategy = strategy }

func setStrategy(_ strategy: FilterStrategy) { self.strategy = strategy }

func filter(items: [String]) -> [String] { return strategy.apply(to: items) }}

// الاستخدامlet manager = ContentManager(strategy: AlphabeticalFilter())let data = ["Swift", "Objective-C", "Kotlin", "Java", "Python"]print(manager.filter(items: data)) // ["Java", "Kotlin", "Objective-C", "Python", "Swift"]

manager.setStrategy(LengthFilter())print(manager.filter(items: data)) // ["Objective-C", "Python"]

نصيحة: ادمج Strategy مع طريقة المصنع لاختيار الاستراتيجية بناءً على إعدادات المستخدم.



3. Observer عبر Combine — re

المدونات

توصيات الكتب