มีรูปแบบการออกแบบที่เป็นไปได้สำหรับโปรแกรมเชิงวัตถุหรือไม่? ฉันถามนี้เพราะเมื่อเร็ว ๆ นี้ผมเห็นการดำเนินการระดับกับDoor
Lock
มันเป็นส่วนหนึ่งของการทดสอบและคำตอบบอกว่ารหัสเป็นไปตามรูปแบบวัตถุ 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;
};
นี่ทำให้ฉันคิดว่า: รหัสนี้เป็นไปตามรูปแบบการออกแบบที่ดีแม้ว่าคำอธิบายนั้นง่ายมาก (คลาสนี้กำลังออกแบบคลาสประตูพร้อมล็อค) ดังนั้นถ้าฉันเขียนโค้ดที่ซับซ้อนมากขึ้นควรมีรูปแบบการออกแบบที่ฉันมักจะ กำลังติดตาม