В обьектно-ориентированном программировании существуют несколько общеизвестных хитрых алгоритмов
использования возможностей ООП . Изощренное наследование , полиморфизм позволяют компактно порождать сложные
обьекты там , где при стандартных подходах это делается более трудоемкими способами .
Abstract factory
Рассмотрим один из таких подходов .
С его помощью мы смоделируем животный мир 2-х континентов и взаимодействие видов внутри каждого из них .
Класс X - это хищники , класс ML - млекопитающие .
class Ml
{
};
class X
{
public:
virtual void Eat( const Ml & ml ) = 0;
};
class Antilopa : public Ml
{
};
class Lion : public X
{
public:
void Eat( const Ml & ml )
{
printf("Lion eats something " );
}
};
class Bizon : public Ml
{
};
class Wolf : public X
{
public:
void Eat( const Ml & ml )
{
printf("Wolf eats something" );
}
};
class Continent
{
public:
virtual X * create_x() const = 0;
virtual Ml * create_ml() const = 0;
};
class Africa : public Continent
{
public:
Ml * create_ml() const
{
return new Antilopa();
}
X * create_x() const
{
return new Lion();
}
};
class America : public Continent
{
public:
Ml * create_ml() const
{
return new Bizon();
}
X * create_x() const
{
return new Wolf();
}
};
class AnimalWorld
{
private : Ml & ml;
private : X & x;
public:
AnimalWorld( const Continent & continent ) :
x (*continent.create_x()),
ml (*continent.create_ml())
{
}
public:
void RunFoodChain()
{
x.Eat(ml);
}
};
int main()
{
Continent *africa = new Africa();
AnimalWorld *world = new AnimalWorld( *africa );
world->RunFoodChain();
Continent *america = new America();
world = new AnimalWorld( *america );
world->RunFoodChain();
return 0 ;
}
|
|