#pragma once
// 访问者模式
class VisitorAge;
class Element
{
public:
Element(std::string name, int age, std::string sex) :m_name(name), m_age(age), m_sex(sex)
{
};
virtual ~Element()
{
}
std::string getName()
{
return this->m_name;
}
int getAge()
{
return m_age;
}
std::string getSex()
{
return m_sex;
}
public:
virtual void showName() = 0;
virtual void accept(VisitorAge visitor) = 0;
public:
std::string m_name;
int m_age;
std::string m_sex;
};
class ElementA : public Element
{
public:
/* 显示调用父类的构造函数 */
ElementA(std::string name, int age, std::string sex) : Element(name, age, sex)
{
}
public:
virtual void showName();
virtual void accept(VisitorAge visitor);
};
class ElementB : public Element
{
public:
ElementB(std::string name, int age, std::string sex) : Element(name, age, sex)
{
}
public:
virtual void showName();
virtual void accept(VisitorAge visitor);
};
class VisitorAge
{
public:
virtual void visitElementAge(Element& element);
};
class VisitorSex
{
public:
virtual void visitElementSex(Element& element);
};
// 需要从上而下在类中增加一个方法的时候需要怎么解决
// 比如增加一个 showAge()
// 如果从上而下依次添加 破坏了类的开闭原则
// 解决:在类中增加一个接口,接受客户要求显示什么