This commit is contained in:
Alexander Zhirov 2022-11-16 13:55:33 +03:00
parent ecfd117aba
commit deac4ef4c7
15 changed files with 130 additions and 0 deletions

View File

@ -13,6 +13,7 @@
### Структурные ### Структурные
1. [Декоратор](decorator/) 1. [Декоратор](decorator/)
2. [Адаптер](adapter/)
### Пораждающие ### Пораждающие

19
adapter/README.md Normal file
View File

@ -0,0 +1,19 @@
# Адаптер
Структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Паттерн **Адаптер** преобразует интерфейс класса к другому интерфейсу, на который рассчитан клиент. Адаптер обеспечивает совместную работу классов, невозможную в обычных условиях из-за несовместимости интерфейсов.
## Схемы
![scheme-1](scheme-1.png)
![scheme-2](scheme-2.png)
![scheme-3](scheme-3.png)
![scheme-3](scheme-4.png)
![scheme-3](scheme-5.png)
![scheme-3](scheme-6.png)

BIN
adapter/scheme-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

BIN
adapter/scheme-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
adapter/scheme-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
adapter/scheme-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
adapter/scheme-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
adapter/scheme-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

View File

@ -0,0 +1,28 @@
module app;
import lib;
import std.stdio : writeln;
void main()
{
Duck duck = new MallardDuck();
Turkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
writeln("The Turkey says...");
turkey.gobble();
turkey.fly();
writeln("\nThe Duck says...");
testDuck(duck);
writeln("\nThe TurkeyAdapter says...");
testDuck(turkeyAdapter);
}
void testDuck(Duck duck)
{
duck.quack();
duck.fly();
}

View File

@ -0,0 +1,7 @@
module lib.duck;
interface Duck
{
void quack();
void fly();
}

View File

@ -0,0 +1,17 @@
module lib.mallarduck;
import lib.duck;
import std.stdio : writeln;
class MallardDuck : Duck
{
void quack()
{
writeln("Quack!");
}
void fly()
{
writeln("I'm flying");
}
}

View File

@ -0,0 +1,7 @@
module lib;
public import lib.duck;
public import lib.mallarduck;
public import lib.turkey;
public import lib.turkeyadapter;
public import lib.wildturkey;

View File

@ -0,0 +1,7 @@
module lib.turkey;
interface Turkey
{
void gobble();
void fly();
}

View File

@ -0,0 +1,27 @@
module lib.turkeyadapter;
import lib.turkey;
import lib.duck;
class TurkeyAdapter : Duck
{
Turkey turkey;
this(Turkey turkey)
{
this.turkey = turkey;
}
void quack()
{
turkey.gobble();
}
void fly()
{
foreach (val; 0..5)
{
turkey.fly();
}
}
}

View File

@ -0,0 +1,17 @@
module lib.wildturkey;
import lib.turkey;
import std.stdio : writeln;
class WildTurkey : Turkey
{
void gobble()
{
writeln("Gobble gobble");
}
void fly()
{
writeln("I'm flying a short distance");
}
}