Existe-t-il un modèle de conception concevable pour tout programme orienté objet? Je demande cela parce que récemment j'ai vu une implémentation d'une Door
classe avec un Lock
. Cela faisait partie d'un test et la réponse indiquait que le code suivait le modèle d'objet nul:
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;
};
Cela m'a fait penser: ce code suit un bon modèle de conception même si la description est si simple (cette classe conçoit une classe de porte avec un verrou), donc si j'écris un code plus complexe, devrait-il toujours y avoir un modèle de conception suis-je?