class Person{
public:
virtual ~Person()
{}
virtual bool isMale() const=0;
virtual char getCode() const=0;
};
class Male:public Person
{
public:
bool isMale() const
{
return true;
}
char getCode() const
{
return 'M';
}
};
class Female:public Person
{
public:
bool isMale() const
{
return false;
}
char getCode() const
{
return 'F';
}
};
重构后代码
class Person
{
public:
static Person* createMale();
static Person* createFeMale();
bool isMale()
{
return isSexMale;
}
char getCode()
{
return code;
}
private:
Person(bool arg1, char arg2):isSexMale(arg1),code(arg2)
{}
bool isSexMale;
char code;
};
#include "ReplaceSubclassWithField.h"
#include <iostream>
using namespace std;
Person* Person::createMale()
{
return new Person(true, 'M');
}
Person* Person::createFeMale()
{
return new Person(false, 'F');
}
void ReplaceSubclassWithField()
{
#if 0
Person* kent = new Male();
#endif
Person* kent = Person::createMale();
cout<<kent->getCode()<<endl;
cout<<kent->isMale()<<endl;
}