رقصنده با کد
782 subscribers
1.71K photos
850 videos
207 files
668 links
Here are some interesting things I've come across during my learning process. That's it. Admin ID:
@alithecodeguy
Download Telegram
💡مفهوم Design Pattern چیه؟ (توضیح ساده با مثال‌های جاوااسکریپتی)

راه‌حل آزمایش‌شده برای مشکلاتی هست که توی طراحی نرم‌افزار تکرار می‌شن.

🎯 دسته‌بندی کلی:
1. Creational (ایجادکننده) → ساختن آبجکت‌ها به شکل درست
2. Structural (ساختاری) → ساختار و ارتباط بین کلاس‌ها و آبجکت‌ها
3. Behavioral (رفتاری) → نحوه تعامل و رفتار آبجکت‌ها با هم

-------------------------------------

1. Singleton Pattern

فقط یک نمونه (instance) از یک کلاس داشته باشیم

مثال:


const Singleton = (function () {
let instance;

function createInstance() {
return { id: Date.now() };
}

return {
getInstance() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();

const a = Singleton.getInstance();
const b = Singleton.getInstance();
console.log(a === b); // true


-------------------------------------

2. Factory Pattern

ساختن آبجکت بدون مشخص کردن کلاس دقیق

مثال:


function UserFactory(role) {
if (role === "admin") {
return { role: "admin", permissions: ["read", "write", "delete"] };
}
if (role === "user") {
return { role: "user", permissions: ["read"] };
}
}

const admin = UserFactory("admin");
const user = UserFactory("user");


-------------------------------------

3. Module Pattern

پنهان‌سازی دیتا با استفاده از Scope


const Counter = (function () {
let count = 0;

return {
increment() {
count++;
return count;
},
reset() {
count = 0;
}
};
})();

Counter.increment(); // 1
Counter.increment()


-------------------------------------

4. Observer Pattern

آبجکت‌ها می‌تونن به تغییرات یه آبجکت دیگه واکنش نشون بدن (مثل Event system)

مثال:


class Subject {
constructor() {
this.observers = [];
}

subscribe(fn) {
this.observers.push(fn);
}

notify(data) {
this.observers.forEach(fn => fn(data));
}
}

const news = new Subject();

news.subscribe((msg) => console.log("Listener 1:", msg));
news.subscribe((msg) => console.log("Listener 2:", msg));

news.notify("New Article Published!");


-------------------------------------

5. Strategy Pattern

تغییر رفتار با جایگزینی الگوریتم در زمان اجرا

مثال:


class PaymentProcessor {
constructor(strategy) {
this.strategy = strategy;
}

pay(amount) {
this.strategy.pay(amount);
}
}

class PayPal {
pay(amount) {
console.log("Paying with PayPal:", amount);
}
}

class Stripe {
pay(amount) {
console.log("Paying with Stripe:", amount);
}
}

const processor = new PaymentProcessor(new PayPal());
processor.pay(100); // Paying with PayPal: 100

processor.strategy = new Stripe();
processor.pay(200); // Paying with Stripe: 200


-------------------------------------

6. Decorator Pattern

اضافه‌کردن ویژگی به آبجکت، بدون تغییر ساختارش


function user(name) {
return { name };
}

function withEmail(user, email) {
return { ...user, email };
}

const ali = user("Ali");
const aliWithEmail = withEmail(ali, "[email protected]");


-------------------------------------

7. Proxy Pattern

کنترل دسترسی یا تغییر رفتار دسترسی به آبجکت

مثال:


const user = {
name: "Ali",
password: "1234"
};

const securedUser = new Proxy(user, {
get(target, prop) {
if (prop === "password") {
return "****"; // مخفی کردن پسورد
}
return target[prop];
}
});

console.log(securedUser.name); // Ali
console.log(securedUser.password); // ****


-------------------------------------

8. Command Pattern

اجرای دستورات با قابلیت undo/redo

مثال:


class Light {
on() {
console.log("Light ON");
}

off() {
console.log("Light OFF");
}
}

class Command {
constructor(action) {
this.action = action;
}

execute() {
this.action();
}
}

const light = new Light();
const turnOn = new Command(() => light.on());
const turnOff = new Command(() => light.off());

turnOn.execute();
turnOff.execute();


مطالب بیشتر در کانال رقصنده با کد:
https://t.iss.one/danceswithcode

#interview #designpattern @alithecodeguy