Visitor

// Customer.h

#ifndef _CUSTOMER_H

#define _CUSTOMER_H

class Customer {

public:

Customer(int customerType);

private:

int customerType;

public:

virtual void action() = 0;

inline const int get_customerType() const;

};

inline const int Customer::get_customerType() const {

return customerType;

}

#endif

說明

    • 設計『多型』物件,將各繼承物件功能統一。
    • VisitorCustomer 物件繼承 Customer 物件,將其他相同繼承 Customer 物件統合。
      • VisitorCustomer 物件利用『多型』,提供統一之 action() 。

// VisitorCustomer.h

#ifndef _VISITORCUSTOMER_H

#define _VISITORCUSTOMER_H

#include "Customer.h"

class VIP;

class Ordinary;

class Premium;

class VisitorCustomer : public Customer {

public:

VisitorCustomer();

virtual void action(const Customer * customer);

virtual void action(const VIP * vip);

virtual void action(const Premium * premium);

virtual void action(const Ordinary * ordinary);

private:

#endif