Gibt es ein denkbares Entwurfsmuster für ein objektorientiertes Programm? Ich frage dies, weil ich vor kurzem eine Implementierung einer Door
Klasse mit a gesehen habe Lock
. Es war Teil eines Tests und die Antwort besagte, dass der Code dem Null-Objektmuster folgt:
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;
};
Das ließ mich denken: Dieser Code folgt einem guten Entwurfsmuster, obwohl die Beschreibung so einfach ist (diese Klasse entwirft eine Türklasse mit einem Schloss). Wenn ich also komplexeren Code schreibe, sollte es immer ein Entwurfsmuster geben, das ich habe folge ich?