স্ট্রাকচারাল ডিজাইন প্যাটার্নস: Facade, Flyweight, এবং Proxy

স্ট্রাকচারাল ডিজাইন প্যাটার্নস আপনাকে ক্লাস এবং অবজেক্ট সাজাতে সাহায্য করে।

আজ আমরা আপনার টুলকিট সম্পূর্ণ করতে শেষ তিনটি প্যাটার্ন নিয়ে আলোচনা করব।

১. The Facade Pattern Facade জটিল সিস্টেমকে সহজ করে তোলে। এটি একগুচ্ছ অগোছালো ক্লাসের জন্য একটি সহজ ইন্টারফেস প্রদান করে।

একটি মুভি থিয়েটারের কথা ভাবুন। মুভি দেখার জন্য আপনাকে লাইট ডিম করা, প্রজেক্টর চালু করা এবং পর্দা খুলতে হয়। পাঁচটি আলাদা সিস্টেম কল করার পরিবর্তে, আপনি একটি মেথড কল করেন: theater.watch_movie()

এটি ব্যবহার করুন যখন:

  • আপনি একটি জটিল সাবসিস্টেমকে সহজ করতে চান।
  • একটি বড় API-এর জন্য আপনার একটি সিঙ্গেল এন্ট্রি পয়েন্ট প্রয়োজন হয়।
  • আপনি ক্লায়েন্টদের ইন্টারনাল লজিক থেকে আলাদা (decouple) করতে চান।

২. The Flyweight Pattern Flyweight মেমরি সাশ্রয় করে। যখন আপনার হাজার হাজার একই ধরণের অবজেক্ট থাকে, তখন এটি কাজ করে।

প্রতিটি অবজেক্টে প্রতিটি ডিটেইল সংরক্ষণ করার পরিবর্তে, আপনি ডেটাগুলোকে ভাগ করে ফেলেন। আপনি শেয়ার করা, অপরিবর্তিত ডেটা (intrinsic state) এক জায়গায় রাখেন। আর ইউনিক ডেটা (extrinsic state) আলাদাভাবে রাখেন।

এটি ব্যবহার করুন যখন:

  • মেমরি ব্যবহার একটি বড় সমস্যা হয়ে দাঁড়ায়।
  • আপনি টেক্সট এডিটরের ক্যারেক্টার বা গেমের পার্টিকেলের মতো লক্ষ লক্ষ একই ধরণের অবজেক্ট পরিচালনা করেন।
  • পারফরম্যান্স উন্নত করতে আপনি অবজেক্ট পুলিং ব্যবহার করতে চান।

৩. The Proxy Pattern Proxy অন্য একটি অবজেক্টের প্রতিনিধি (stand-in) হিসেবে কাজ করে। এটি ক্লায়েন্ট এবং আসল অবজেক্টের মাঝে বসে অ্যাক্সেস নিয়ন্ত্রণ করে।

একটি প্রক্সি যা পারে:

  • Lazy load: ব্যবহারকারী ক্লিক করার পরেই কেবল ভারী ইমেজগুলো লোড করা।
  • Control access: একজন ব্যবহারকারীর ডেটাবেস ডিলিট করার অনুমতি আছে কিনা তা যাচাই করা।
  • Log activity: কে একটি নির্দিষ্ট সার্ভিস ব্যবহার করছে তা ট্র্যাক করা।
  • Cache results: ব্যয়বহুল লজিক চালানোর পরিবর্তে সংরক্ষিত ডেটা রিটার্ন করা।

এটি ব্যবহার করুন যখন:

  • আপনার ব্যয়বহুল অপারেশনগুলো বিলম্বিত করার প্রয়োজন হয়।
  • আপনাকে একটি সেনসিটিভ সার্ভিস রক্ষা করতে হয়।
  • মূল ক্লাস পরিবর্তন না করেই আপনি যখন লগিং বা সিকিউরিটি যোগ করতে চান।

Summary Table

Adapter: অসামঞ্জস্যপূর্ণ সিস্টেমগুলোকে একসাথে কাজ করতে সাহায্য করে। • Bridge: অ্যাবস্ট্রাকশনকে ইমপ্লিমেন্টেশন থেকে আলাদা করে। • Composite: ট্রি স্ট্রাকচার তৈরি করে। • Decorator: ক্লাস পরিবর্তন না করেই নতুন আচরণ (behavior) যোগ করে। • Facade: জটিল সাবসিস্টেমকে সহজ করে। • Flyweight: মেমরি বাঁচাতে ডেটা শেয়ার করে। • Proxy: অবজেক্টের অ্যাক্সেস নিয়ন্ত্রণ করে।

গোল্ডেন রুল: কোড মেইনটেনেবল করার জন্য এই প্যাটার্নগুলো ব্যবহার করুন। শুধুমাত্র দেখানোর জন্য এগুলো ব্যবহার করবেন না।

এরপর, আমরা Behavioral Design Patterns সিরিজ শুরু করব।

Source: https://dev.to/mahdi0shamlou/mahdi-shamlou-structural-design-patterns-2026-facade-flyweight-proxy-production-examples-g5l