diff --git a/README.md b/README.md index cfd55dc..a8f18fb 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ ### Структурные 1. [Декоратор](decorator/) +2. [Адаптер](adapter/) ### Пораждающие diff --git a/adapter/README.md b/adapter/README.md new file mode 100644 index 0000000..6447f72 --- /dev/null +++ b/adapter/README.md @@ -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) diff --git a/adapter/scheme-1.png b/adapter/scheme-1.png new file mode 100644 index 0000000..263b71a Binary files /dev/null and b/adapter/scheme-1.png differ diff --git a/adapter/scheme-2.png b/adapter/scheme-2.png new file mode 100644 index 0000000..733f805 Binary files /dev/null and b/adapter/scheme-2.png differ diff --git a/adapter/scheme-3.png b/adapter/scheme-3.png new file mode 100644 index 0000000..45d1d1b Binary files /dev/null and b/adapter/scheme-3.png differ diff --git a/adapter/scheme-4.png b/adapter/scheme-4.png new file mode 100644 index 0000000..89989b8 Binary files /dev/null and b/adapter/scheme-4.png differ diff --git a/adapter/scheme-5.png b/adapter/scheme-5.png new file mode 100644 index 0000000..44cad3a Binary files /dev/null and b/adapter/scheme-5.png differ diff --git a/adapter/scheme-6.png b/adapter/scheme-6.png new file mode 100644 index 0000000..a0c09c4 Binary files /dev/null and b/adapter/scheme-6.png differ diff --git a/adapter/simpleadapter/app.d b/adapter/simpleadapter/app.d new file mode 100644 index 0000000..91309ee --- /dev/null +++ b/adapter/simpleadapter/app.d @@ -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(); +} diff --git a/adapter/simpleadapter/lib/duck.d b/adapter/simpleadapter/lib/duck.d new file mode 100644 index 0000000..bb2ad78 --- /dev/null +++ b/adapter/simpleadapter/lib/duck.d @@ -0,0 +1,7 @@ +module lib.duck; + +interface Duck +{ + void quack(); + void fly(); +} diff --git a/adapter/simpleadapter/lib/mallarduck.d b/adapter/simpleadapter/lib/mallarduck.d new file mode 100644 index 0000000..5a7cbae --- /dev/null +++ b/adapter/simpleadapter/lib/mallarduck.d @@ -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"); + } +} diff --git a/adapter/simpleadapter/lib/package.d b/adapter/simpleadapter/lib/package.d new file mode 100644 index 0000000..e5d953b --- /dev/null +++ b/adapter/simpleadapter/lib/package.d @@ -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; diff --git a/adapter/simpleadapter/lib/turkey.d b/adapter/simpleadapter/lib/turkey.d new file mode 100644 index 0000000..46f6858 --- /dev/null +++ b/adapter/simpleadapter/lib/turkey.d @@ -0,0 +1,7 @@ +module lib.turkey; + +interface Turkey +{ + void gobble(); + void fly(); +} diff --git a/adapter/simpleadapter/lib/turkeyadapter.d b/adapter/simpleadapter/lib/turkeyadapter.d new file mode 100644 index 0000000..3c6726a --- /dev/null +++ b/adapter/simpleadapter/lib/turkeyadapter.d @@ -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(); + } + } +} diff --git a/adapter/simpleadapter/lib/wildturkey.d b/adapter/simpleadapter/lib/wildturkey.d new file mode 100644 index 0000000..da45f58 --- /dev/null +++ b/adapter/simpleadapter/lib/wildturkey.d @@ -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"); + } +}