Có một mẫu thiết kế có thể hiểu được cho bất kỳ chương trình hướng đối tượng? Tôi hỏi điều này bởi vì gần đây tôi thấy một Door
lớp thực hiện với một Lock
. Đó là một phần của thử nghiệm và câu trả lời nói rằng mã đang theo mẫu Null Object:
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;
};
Điều này làm tôi nghĩ: Mã này tuân theo một mẫu thiết kế tốt mặc dù mô tả rất đơn giản (lớp này đang thiết kế một lớp cửa có khóa), vì vậy nếu tôi viết mã phức tạp hơn, thì phải luôn có một số mẫu thiết kế mà tôi đang theo dõi?