Apakah ada pola desain yang mungkin untuk program berorientasi objek? Saya bertanya ini karena baru-baru ini saya melihat implementasi Door
kelas dengan a Lock
. Itu adalah bagian dari tes dan jawabannya mengatakan bahwa kode mengikuti pola Objek Null:
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;
};
Ini membuat saya berpikir: Kode ini mengikuti pola desain yang baik meskipun deskripsinya sangat sederhana (kelas ini merancang kelas pintu dengan kunci), jadi jika saya menulis kode yang lebih kompleks, harus selalu ada beberapa pola desain yang saya miliki. mengikuti?