Skip to content

Commit 7567ddc

Browse files
committed
Combining composite pattern
1 parent 79bab96 commit 7567ddc

26 files changed

+471
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#include "AbstractDuckFactory.h"
2+
3+
namespace combining::composite
4+
{
5+
AbstractDuckFactory::~AbstractDuckFactory()
6+
{
7+
8+
}
9+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#pragma once
2+
3+
#include "IQuackable.h"
4+
5+
#include <memory>
6+
7+
namespace combining::composite
8+
{
9+
class AbstractDuckFactory
10+
{
11+
public:
12+
virtual ~AbstractDuckFactory() = 0;
13+
14+
virtual std::shared_ptr<IQuackable> createMallardDuck() = 0;
15+
16+
virtual std::shared_ptr<IQuackable> createRedheadDuck() = 0;
17+
18+
virtual std::shared_ptr<IQuackable> createDuckCall() = 0;
19+
20+
virtual std::shared_ptr<IQuackable> createRubberDuck() = 0;
21+
};
22+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include "CountingDuckFactory.h"
2+
3+
#include "DuckCall.h"
4+
#include "MallardDuck.h"
5+
#include "QuackCounter.h"
6+
#include "RedheadDuck.h"
7+
#include "RubberDuck.h"
8+
9+
namespace combining::composite
10+
{
11+
std::shared_ptr<IQuackable> CountingDuckFactory::createMallardDuck()
12+
{
13+
return std::make_shared<QuackCounter>(std::make_shared<MallardDuck>());
14+
}
15+
16+
std::shared_ptr<IQuackable> CountingDuckFactory::createRedheadDuck()
17+
{
18+
return std::make_shared<QuackCounter>(std::make_shared<RedheadDuck>());
19+
}
20+
21+
std::shared_ptr<IQuackable> CountingDuckFactory::createDuckCall()
22+
{
23+
return std::make_shared<QuackCounter>(std::make_shared<DuckCall>());
24+
}
25+
26+
std::shared_ptr<IQuackable> CountingDuckFactory::createRubberDuck()
27+
{
28+
return std::make_shared<QuackCounter>(std::make_shared<RubberDuck>());
29+
}
30+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include "AbstractDuckFactory.h"
4+
5+
namespace combining::composite
6+
{
7+
class CountingDuckFactory : public AbstractDuckFactory
8+
{
9+
public:
10+
std::shared_ptr<IQuackable> createMallardDuck() override;
11+
12+
std::shared_ptr<IQuackable> createRedheadDuck() override;
13+
14+
std::shared_ptr<IQuackable> createDuckCall() override;
15+
16+
std::shared_ptr<IQuackable> createRubberDuck() override;
17+
};
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "DecoyDuck.h"
2+
3+
#include <iostream>
4+
5+
namespace combining::composite
6+
{
7+
void DecoyDuck::quack()
8+
{
9+
std::cout << "<< Silence >>" << '\n';
10+
}
11+
}

14combining/composite/DecoyDuck.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
#include "IQuackable.h"
4+
5+
namespace combining::composite
6+
{
7+
class DecoyDuck : public IQuackable
8+
{
9+
public:
10+
void quack() override;
11+
};
12+
}

14combining/composite/DuckCall.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "DuckCall.h"
2+
3+
#include <iostream>
4+
5+
namespace combining::composite
6+
{
7+
void DuckCall::quack()
8+
{
9+
std::cout << "Kwak" << '\n';
10+
}
11+
}

14combining/composite/DuckCall.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
#include "IQuackable.h"
4+
5+
namespace combining::composite
6+
{
7+
class DuckCall : public IQuackable
8+
{
9+
public:
10+
void quack() override;
11+
};
12+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include "DuckFactory.h"
2+
3+
#include "DuckCall.h"
4+
#include "MallardDuck.h"
5+
#include "RedheadDuck.h"
6+
#include "RubberDuck.h"
7+
8+
namespace combining::composite
9+
{
10+
11+
std::shared_ptr<IQuackable> DuckFactory::createMallardDuck()
12+
{
13+
return std::make_shared<MallardDuck>();
14+
}
15+
16+
std::shared_ptr<IQuackable> DuckFactory::createRedheadDuck()
17+
{
18+
return std::make_shared<RedheadDuck>();
19+
}
20+
21+
std::shared_ptr<IQuackable> DuckFactory::createDuckCall()
22+
{
23+
return std::make_shared<DuckCall>();
24+
}
25+
26+
std::shared_ptr<IQuackable> DuckFactory::createRubberDuck()
27+
{
28+
return std::make_shared<RubberDuck>();
29+
}
30+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include "AbstractDuckFactory.h"
4+
5+
namespace combining::composite
6+
{
7+
class DuckFactory : public AbstractDuckFactory
8+
{
9+
public:
10+
std::shared_ptr<IQuackable> createMallardDuck() override;
11+
12+
std::shared_ptr<IQuackable> createRedheadDuck() override;
13+
14+
std::shared_ptr<IQuackable> createDuckCall() override;
15+
16+
std::shared_ptr<IQuackable> createRubberDuck() override;
17+
};
18+
}

0 commit comments

Comments
 (0)