> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns.md).

# Design patterns

ভাবুন তো—প্রতিদিন হাজারো developer পৃথিবীর নানা প্রান্তে একই ধরনের সমস্যার সমাধান করছেন। কেউ logging system তৈরি করছেন, কেউ payment gateway handle করছেন, কেউ আবার database connection manage করছেন। এখন প্রশ্ন হলো **আমরা কি প্রতিবার নতুন করে solution তৈরি করবো, নাকি প্রমাণিত কোনো shortcut ব্যবহার করবো?**

এখানেই আসে Software Engineering-এর এক অসাধারণ অস্ত্র— **Design Patterns**

এগুলো হলো সেই [**battle-tested solutions**](#user-content-fn-1)[^1], যেগুলো হাজারো developer এর অভিজ্ঞতা থেকে তৈরি। একবার শিখে নিলে, এগুলো হয়ে ওঠে আপনার coding এর **Cheat Code**— যা দিয়ে আপনি:

* &#x20;দ্রুত কোড লিখতে পারবেন
* Secure & maintainable system বানাতে পারবেন
* reusable এবং scalable solution তৈরি করতে পারবেন
* আর developer community-তে common language ব্যবহার করতে পারবেন

এক কথায় **Design Patterns** মানে হলো পূর্বে প্রমাণিত Blueprint[^2], যা আপনাকে **complex problem → simple elegant solution** এ পৌঁছে দেয়।

### Design Patterns কী?

**Design Pattern** হলো **reusable solution to common problems** in software design. এগুলো কোনো ready-made code নয়, বরং এক ধরণের **blueprint বা template**, যা বিভিন্ন situation-এ ব্যবহার করা যায়।

### কেন Design Patterns দরকার?

1. **Reusable Solution:** একই ধরনের সমস্যা হলে বারবার নতুন করে ভাবতে হয় না।
2. **Maintainability:** কোড clean, structured এবং maintain করা সহজ হয়।
3. **Scalability:** বড় প্রজেক্টেও সহজে pattern extend করা যায়।
4. **Communication:** Developers একই pattern এর নাম শুনেই বুঝে যায় design structure।

### Design Patterns এর Classification

Design Patterns সাধারণত তিনটি ভাগে বিভক্ত:

#### 1) Creational Patterns (Object তৈরি করার উপায়)

এগুলো object creation process কে সহজ করে এবং flexibility বাড়ায়।

* [**Singleton** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/singleton-design-pattern)→ একটি class এর শুধু একটিই instance থাকবে।
* [**Factory Method**](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/factory-design-pattern) → object create করার দায়িত্ব আলাদা method/class এর হাতে।
* **Abstract Factory** → related object group তৈরি করে।
* [**Builder** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/builder-design-pattern)→ step-by-step complex object তৈরি করে।
* **Prototype** → বিদ্যমান object copy করে নতুন object তৈরি।

#### 2) Structural Patterns (Class এবং Object কে সংগঠিত করার উপায়)

এগুলো object গুলোকে বড় structure এ combine করতে সাহায্য করে।

* [**Adapter** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/adapter-design-pattern)→ একটি interface কে অন্য interface এর সাথে মানিয়ে দেয়।
* [**Decorator** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/decorator-design-pattern)→ existing class এর উপর নতুন behavior যোগ করে।
* **Composite** → tree structure এ object organize করা।
* **Proxy** → আরেকটি object এর access control করে।
* [**Facade** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/facade-design-pattern)→ জটিল system এর সহজ interface প্রদান করে।

#### 3) Behavioral Patterns (Object গুলোর মধ্যে যোগাযোগের নিয়ম)

এগুলো define করে কিভাবে object গুলো পরস্পরের সাথে interact করবে।

* [**Observer** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/observer-design-pattern)→ একটি object change হলে অন্যান্য dependent object update হয়।
* [**Chain of Responsibility**](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/chain-of-responsibility-design-pattern) → Request flows through multiple handlers
* [**Strategy** ](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/strategy-design-pattern)→ behavior change করা যায় runtime এ।
* **Command** → action কে object আকারে wrap করা।
* **Mediator** → object গুলোর মধ্যে communication centralize করা।
* **State** → object এর behavior তার state এর উপর নির্ভরশীল।

\
**Design Pattern ≠ Ready Code** বরং এটি হলো **Guideline**, যা আপনাকে smart এবং reusable design করতে সাহায্য করে।

[^1]: The solution (a library, framework, algorithm, or process) has already been used successfully in production environments, often under heavy load or challenging conditions.

[^2]: template, architecture, or reference design
