Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
 Алгоритмы
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Go Web ...148 
 Максвелл 3...126 
 Alg1...119 
 C + UNIX...114 
 Trees...114 
 Plusquellic 1...109 
 Assembler...109 
 Анализ логов...105 
 William Gropp...104 
 Ext4 FS...100 
 Rust...97 
 Errors...95 
 Alg4...95 
 Alg2...93 
 Kamran Husain...92 
 Перенос прогр...92 
 Rust 2...92 
 Steve Pate 1...89 
 Пакеты и моду...86 
 QT->Qt...83 
 
  01.01.2025 : 3803065 посещений 

iakovlev.org
В обьектно-ориентированном программировании существуют несколько общеизвестных хитрых алгоритмов использования возможностей ООП . Изощренное наследование , полиморфизм позволяют компактно порождать сложные обьекты там , где при стандартных подходах это делается более трудоемкими способами .

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 ;
 }
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье