adapter
This commit is contained in:
parent
ecfd117aba
commit
deac4ef4c7
|
@ -13,6 +13,7 @@
|
|||
### Структурные
|
||||
|
||||
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