State

// State.h

#ifndef _STATE_H

#define _STATE_H

#include <string>

using namespace std;

class State {

private:

int currentState;

public:

virtual void Up();

virtual void Middle();

virtual void Down();

private:

string warningMessage;

public:

inline const string get_warningMessage() const;

};

inline const string State::get_warningMessage() const {

return warningMessage;

}

#endif

// Light.h

#ifndef _LIGHT_H

#define _LIGHT_H

#include "Machine.h"

class Light : public Machine {

public:

Light();

private:

void Middle();

};

#endif

說明

    • 設計狀態物件,提供引用物件改變狀態功能。
    • Machine 引用 State 物件,提供改變狀態功能:
      • Light 與 TV 均無 Middle 狀態,故將 Middle() 功能隱去(private)。

// Machine.h

#ifndef _MACHINE_H

#define _MACHINE_H

#include "State.h"

#include <string>

using namespace std;

class Machine {

private:

State currentState;

public:

Machine(string machineType);

void Up();

void Middle();

void Down();

string getWarningMessage();

private:

string machineType;

public:

inline const string get_machineType() const;

};

inline const string Machine::get_machineType() const {

return machineType;

}

#endif

// Heater.h

#ifndef _HEATER_H

#define _HEATER_H

#include "Machine.h"

class Heater : public Machine {

public:

Heater();

};

#endif