💡مفهوم Design Pattern چیه؟ (توضیح ساده با مثالهای جاوااسکریپتی)
راهحل آزمایششده برای مشکلاتی هست که توی طراحی نرمافزار تکرار میشن.
🎯 دستهبندی کلی:
1. Creational (ایجادکننده) → ساختن آبجکتها به شکل درست
2. Structural (ساختاری) → ساختار و ارتباط بین کلاسها و آبجکتها
3. Behavioral (رفتاری) → نحوه تعامل و رفتار آبجکتها با هم
-------------------------------------
1. Singleton Pattern
فقط یک نمونه (instance) از یک کلاس داشته باشیم
✅ مثال:
-------------------------------------
2. Factory Pattern
ساختن آبجکت بدون مشخص کردن کلاس دقیق
✅ مثال:
-------------------------------------
3. Module Pattern
پنهانسازی دیتا با استفاده از Scope
-------------------------------------
4. Observer Pattern
آبجکتها میتونن به تغییرات یه آبجکت دیگه واکنش نشون بدن (مثل Event system)
✅ مثال:
-------------------------------------
5. Strategy Pattern
تغییر رفتار با جایگزینی الگوریتم در زمان اجرا
✅ مثال:
-------------------------------------
6. Decorator Pattern
اضافهکردن ویژگی به آبجکت، بدون تغییر ساختارش
-------------------------------------
7. Proxy Pattern
کنترل دسترسی یا تغییر رفتار دسترسی به آبجکت
✅ مثال:
-------------------------------------
8. Command Pattern
اجرای دستورات با قابلیت undo/redo
✅ مثال:
مطالب بیشتر در کانال رقصنده با کد:
https://t.iss.one/danceswithcode
#interview #designpattern @alithecodeguy
راهحل آزمایششده برای مشکلاتی هست که توی طراحی نرمافزار تکرار میشن.
🎯 دستهبندی کلی:
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