কোনও অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামের জন্য কি অনুমেয় নকশার প্যাটার্ন রয়েছে? আমি এটি জিজ্ঞাসা করছি কারণ সম্প্রতি আমি একটি Door
সহ একটি শ্রেণীর প্রয়োগ দেখেছি Lock
। এটি একটি পরীক্ষার অংশ ছিল এবং উত্তরে বলা হয়েছিল যে কোডটি নাল অবজেক্টের ধরণ অনুসরণ করছে:
class Lock
{
public:
virtual void close() = 0;
virtual void open() = 0;
virtual bool is_open() const = 0;
virtual ~Lock() { }
};
class DummyLock
: public Lock
{
private:
DummyLock();
DummyLock(const DummyLock&) = delete;
DummyLock& operator=(const DummyLock&) = delete;
private:
void close() { }
void open() { }
bool is_open() const { return true; }
public:
static DummyLock m_instance;
};
class Door
{
public:
Door() : m_lock(DummyLock::m_instance) { }
Door(Lock &lock) : m_lock(lock) { }
public:
Lock& get_lock() const { return m_lock; }
private:
Lock &m_lock;
};
এটি আমাকে ভাবতে বাধ্য করেছে: বিবরণটি এত সহজ হলেও এই কোডটি একটি ভাল ডিজাইনের ধরণ অনুসরণ করে (এই শ্রেণিটি একটি লক সহ একটি ডোর ক্লাস ডিজাইন করছে), সুতরাং আমি যদি আরও জটিল কোড লিখছি, তবে কি সর্বদা কিছু নকশার প্যাটার্ন থাকা উচিত? আমি অনুসরণ করছি?