آموزش design pattern در برنامه نویسی و اصول و مبانی+ PDF رایگان
الگوهای طراحی برای اولین بار توسط کریستوف الکساندر (Christopher Alexander) ارائه شدند. در واقع الگوهای طراحی به عنوان راه حل هایی برای مشکلات فرایند برنامه نویسی معرفی شده اند. این الگوها که توسط متخصصان باتجربه در زمینهٔ شییٔگرایی ابداع شدهاند کمک میکنند تا سورسکدی انعطافپذیرتر و تغییرپذیرتر شود. استفادهٔ صحیح و اصولی از دیزاین پترنها در توسعهٔ نرمافزارهای حرفهای بسیار تأثیرگذار است. دراین مقاله سعی داریم تا مفهوم دیزاین پترن را شرح دهیم و هر آنچه که لازم است را به شما آموزش دهیم.
Design Pattern (الگوی طراحی) چیست؟
دیزاین پترنها راهحلهای صحیح در مسائل مربوط به توسعهٔ نرمافزار هستند که هنگام برنامه نویسی با آن برخورد میکنیم. دیزاین پترن الگویی است که باید در موقعیت مناسب خود مورد استفاده قرار بگیرد تا بهترین نتیجه را در توسعهٔ نرمافزار در اختیار دولوپر قرار دهد. دیزاین پترن وابسته به زبان برنامه نویسی نیست و قابلیت اجرا شدن در همه زبان ها را دارد.
کاربرد Design Pattern
در برنامه نویسی شی گرا، دیزاین پترن ها بهترین، سریع ترین و درست ترین روش برای رسیدن به هدف در برنامه نویسی در کمترین زمان ممکن پیدا شود در واقع دیزاین پترن ها جلوی پیچیدگی های بی مورد را می گیرند و به نوعی نقش تدوینگر را ایفا می کنند و ا موارد حاشیه ای جلوگیری میکنند. این کار سبب می شود تا هر آنچه که نوشته می شود قالب و سقف مخصوص به خود را داشته باشد.
آشنایی با انواع دیزاین پترنها
مهمتر از همه اینکه هر دیزاین پترنی را میتوان به عنوان شمشیر دولبهای در نظر گرفت که اگر در جای نادرست به کار رود، مشکلات زیادی را به وجود می آورد و استفاده اصولی آن توسعه نرم افزاری را به دنبال خواهد داشت.
دیزاین پترنها معمولاً در سه گروه اصلی دستهبندی میشوند که عبارتند از:
1- الگوهای طراحی تکوینی (Creational Design Patterns)
الگوهای طراحی Creational برای حل مشکلات مربوط به ایجاد اشیا در نرم افزار استفاده میشوند.
متداولترین دیزاین پترنهای Creational عبارتند از :
- Factory Method
- Singleton
- Prototype
- Abstract Factory
- Builder
- Object Pool
2- الگوهای طراحی ساختاری (Structural Design Patterns)
الگوهای طراحی ساختاری یا Structural، راه حل هایی برای حل مشکلات توسعه پذیری ساختار نرم افزارهاهستند. این دیزاین پترنها برای مدیریت ارتباط میان کلاسها و شیها با یکدیگر استفاده میشوند.
متداولترین دیزاین پترنهای Structural عبارتند از :
- Adapter
- Decorator
- Facade
- Bridge
- Composite
- Flyweight
- Proxy
3- الگوهای طراحی رفتاری (Behavioral Design Patterns)
الگوهای طراحی Behavioral راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا هستند.
این الگوهای طراحی عبارتند از:
- Chain of responsibility
- Strategy
- Iterator
- Command
- Mediator
- Memento
- Observer
- State
- Template Method
- Visitor
مزایای استفاده از الگوهای طراحی
- افزایش مقیاس پذیری (scalability)
- افزایش قابلیت توسعه پذیری (expandability)
- افزایش انعطاف پذیری (flexibility)
- افزایش سرعت توسعه نرم افزارها
- کاهش خطاها و مشکلات
- کاهش میزان کدنویسی
نقد الگوهای طراحی
- پترن ها برای آنکه بتوانند وظایف خود را به درستی انجام دهند و آنچه را که برای تحققش ایجاد شده اند به درستی پیاده سازی کنند، نیاز به ابزارها و مایحتاج خاصی دارند. آن ها این احتیاجات خود را از زبان برنامه نویسی یا تکنیک هایی که برنامه نویس از آن ها برای کدنویسی استفاده کرده است، دریافت می کنند. بنابراین گاهی الگوهای طراحی هدف را اشتباه شناسایی میکنند.
- عدم وجود پایه و اساس رسمی برای Design Pattern یکی دیگر از نقدها وارد شده به این الگوهاست.
- با وجود اینکه در برنامه نویسی این الگوها موقل ای مهمی به شمار می آیند اما گاهی دیزاین پترن به راه حل هایی ناکارآمد منتهی می شود.
مفاهیم و مبانی مهم اولیه و آموزش ویدیویی
۱. مفاهیم پایهای الگوهای طراحی
-
الگوی طراحی چیست؟ بعنوان یاداوری می گوییم که الگوهای طراحی راهحلهای استانداردی برای مشکلات رایج در طراحی نرمافزار هستند. این الگوها به توسعهدهندگان کمک میکنند تا کدهای خود را ساختارمند و قابل استفاده مجدد کنند.
-
مزایای الگوهای طراحی:
-
بهبود کیفیت کد.
-
افزایش قابلیت نگهداری و توسعهپذیری.
-
کاهش زمان توسعه با استفاده از راهحلهای از پیش تعریفشده.
-
۲. دستهبندی الگوهای طراحی
الگوهای طراحی به سه دسته اصلی تقسیم میشوند:
الف. الگوهای ایجادی (Creational Patterns)
-
هدف: مدیریت فرآیند ایجاد اشیا.
-
مثالها:
-
Singleton: تضمین میکند که تنها یک نمونه از یک کلاس وجود داشته باشد.
-
Factory Method: ایجاد اشیا بدون مشخص کردن کلاس دقیق آنها.
-
Builder: ساخت اشیا پیچیده به صورت گام به گام.
-
ب. الگوهای ساختاری (Structural Patterns)
-
هدف: سازماندهی کلاسها و اشیا به صورت ساختارهای بزرگتر.
-
مثالها:
-
Adapter: تطبیق رابطهای ناسازگار.
-
Decorator: افزودن رفتار به اشیا به صورت پویا.
-
Composite: سازماندهی اشیا در ساختارهای درختی.
-
ج. الگوهای رفتاری (Behavioral Patterns)
-
هدف: مدیریت تعامل و توزیع مسئولیتها بین اشیا.
-
مثالها:
-
Observer: اطلاعرسانی به اشیا درباره تغییرات.
-
Strategy: تعریف خانوادهای از الگوریتمها و انتخاب آنها به صورت پویا.
-
Command: کپسولهسازی درخواستها به عنوان اشیا.
-
۳. الگوهای ایجادی (Creational Patterns)
الف. Singleton
-
هدف: تضمین وجود تنها یک نمونه از یک کلاس.
-
مثال در Python:
class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Singleton, cls).__new__(cls) return cls._instance # استفاده s1 = Singleton() s2 = Singleton() print(s1 is s2) # True
ب. Factory Method
-
هدف: ایجاد اشیا بدون مشخص کردن کلاس دقیق آنها.
-
مثال در Python:
from abc import ABC, abstractmethod class Product(ABC): @abstractmethod def operation(self): pass class ConcreteProductA(Product): def operation(self): return "Product A" class ConcreteProductB(Product): def operation(self): return "Product B" class Creator(ABC): @abstractmethod def factory_method(self): pass def some_operation(self): product = self.factory_method() return product.operation() class ConcreteCreatorA(Creator): def factory_method(self): return ConcreteProductA() class ConcreteCreatorB(Creator): def factory_method(self): return ConcreteProductB() # استفاده creator = ConcreteCreatorA() print(creator.some_operation()) # Product A
۴. الگوهای ساختاری (Structural Patterns)
الف. Adapter
-
هدف: تطبیق رابطهای ناسازگار.
-
مثال در Python:
class Target: def request(self): return "Target: The default target's behavior." class Adaptee: def specific_request(self): return ".eetpadA eht fo roivaheb laicepS" class Adapter(Target): def __init__(self, adaptee): self.adaptee = adaptee def request(self): return f"Adapter: (TRANSLATED) {self.adaptee.specific_request()[::-1]}" # استفاده adaptee = Adaptee() adapter = Adapter(adaptee) print(adapter.request()) # Adapter: (TRANSLATED) Special behavior of the Adaptee.
ب. Decorator
-
هدف: افزودن رفتار به اشیا به صورت پویا.
-
مثال در Python:
class Component: def operation(self): return "Component" class Decorator(Component): def __init__(self, component): self._component = component def operation(self): return f"Decorator({self._component.operation()})" # استفاده component = Component() decorated = Decorator(component) print(decorated.operation()) # Decorator(Component)
۵. الگوهای رفتاری (Behavioral Patterns)
الف. Observer
-
هدف: اطلاعرسانی به اشیا درباره تغییرات.
-
مثال در Python:
class Subject: def __init__(self): self._observers = [] def attach(self, observer): self._observers.append(observer) def notify(self): for observer in self._observers: observer.update(self) class Observer: def update(self, subject): pass class ConcreteObserver(Observer): def update(self, subject): print("Observer: Reacted to the event") # استفاده subject = Subject() observer = ConcreteObserver() subject.attach(observer) subject.notify() # Observer: Reacted to the event
ب. Strategy
-
هدف: تعریف خانوادهای از الگوریتمها و انتخاب آنها به صورت پویا.
-
مثال در Python:
from abc import ABC, abstractmethod class Strategy(ABC): @abstractmethod def execute(self, data): pass class ConcreteStrategyA(Strategy): def execute(self, data): return sorted(data) class ConcreteStrategyB(Strategy): def execute(self, data): return sorted(data, reverse=True) class Context: def __init__(self, strategy): self._strategy = strategy def execute_strategy(self, data): return self._strategy.execute(data) # استفاده data = [1, 3, 2] context = Context(ConcreteStrategyA()) print(context.execute_strategy(data)) # [1, 2, 3]
درس 1
درس 2
درس 3
درس 4
درس 5
دانلود جزوه PDF آموزش دیزاین پترنها
دانلود PDF آموزش الگوهای طراحی
سلام.ممنون از آموزش خوبتون خستهن باشید
پاسخسلام. بسیار ممنونم بابت این آموزش‌ها. واقعا مفید هستند. کاش ادامه داشتند و مطالب رو کامل پوشش می‌دادند.
پاسخ