adapter
This commit is contained in:
parent
ecfd117aba
commit
deac4ef4c7
|
@ -13,6 +13,7 @@
|
||||||
### Структурные
|
### Структурные
|
||||||
|
|
||||||
1. [Декоратор](decorator/)
|
1. [Декоратор](decorator/)
|
||||||
|
2. [Адаптер](adapter/)
|
||||||
|
|
||||||
### Пораждающие
|
### Пораждающие
|
||||||
|
|
||||||
|
|
|
@ -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)
|
Binary file not shown.
After Width: | Height: | Size: 197 KiB |
Binary file not shown.
After Width: | Height: | Size: 104 KiB |
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
Binary file not shown.
After Width: | Height: | Size: 161 KiB |
Binary file not shown.
After Width: | Height: | Size: 205 KiB |
|
@ -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();
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
module lib.duck;
|
||||||
|
|
||||||
|
interface Duck
|
||||||
|
{
|
||||||
|
void quack();
|
||||||
|
void fly();
|
||||||
|
}
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
|
@ -0,0 +1,7 @@
|
||||||
|
module lib.turkey;
|
||||||
|
|
||||||
|
interface Turkey
|
||||||
|
{
|
||||||
|
void gobble();
|
||||||
|
void fly();
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue