Esiste un modello progettuale concepibile per qualsiasi programma orientato agli oggetti? Lo chiedo perché di recente ho visto un'implementazione di una Door
classe con a Lock
. Faceva parte di un test e la risposta diceva che il codice segue il modello 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;
};
Questo mi ha fatto pensare: questo codice segue un buon modello di progettazione anche se la descrizione è così semplice (questa classe sta progettando una classe di porta con una serratura), quindi se sto scrivendo un codice più complesso, dovrebbe esserci sempre un modello di progettazione che io sto seguendo?