template method: adding sort
This commit is contained in:
parent
38ae23f3db
commit
afb0c148a1
|
@ -1,9 +1,9 @@
|
||||||
# Стратегия
|
# Стратегия
|
||||||
|
|
||||||
Инкапсуляция алгоритма в объект — это назначение паттерна **стратегия**.
|
|
||||||
|
|
||||||
Поведенческий паттерн проектирования, который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
|
Поведенческий паттерн проектирования, который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
|
||||||
|
|
||||||
|
Инкапсуляция алгоритма в объект — это назначение паттерна **Стратегия**. Использует композицию. Определяет семейство алгоритмов и обеспечивает их взаимозаменяемость. Инкапсуляция позволяет легко использовать разные алгоритмы на стороне клиента.
|
||||||
|
|
||||||
## Код
|
## Код
|
||||||
|
|
||||||
Каждая утка СОДЕРЖИТ экземпляры `FlyBehavior` и `QuackBehavior`, которым делегируются выполнение соответствующих операций. Подобные связи между двумя классами означают, что используется механизм композиции. Поведение не наследуется, а предоставляется правильно выбранным объектом.
|
Каждая утка СОДЕРЖИТ экземпляры `FlyBehavior` и `QuackBehavior`, которым делегируются выполнение соответствующих операций. Подобные связи между двумя классами означают, что используется механизм композиции. Поведение не наследуется, а предоставляется правильно выбранным объектом.
|
||||||
|
|
|
@ -9,3 +9,15 @@
|
||||||
- Не вызывайте нас - мы вас сами вызовем
|
- Не вызывайте нас - мы вас сами вызовем
|
||||||
|
|
||||||
Алгоритм определяется суперклассом, поэтому последний должен сам обращаться к субклассам, когда потребуется.
|
Алгоритм определяется суперклассом, поэтому последний должен сам обращаться к субклассам, когда потребуется.
|
||||||
|
|
||||||
|
## Схемы
|
||||||
|
|
||||||
|
![scheme-1](scheme-1.png)
|
||||||
|
|
||||||
|
![scheme-2](scheme-2.png)
|
||||||
|
|
||||||
|
![scheme-3](scheme-3.png)
|
||||||
|
|
||||||
|
![scheme-4](scheme-4.png)
|
||||||
|
|
||||||
|
![scheme-5](scheme-5.png)
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 185 KiB |
Binary file not shown.
After Width: | Height: | Size: 272 KiB |
Binary file not shown.
After Width: | Height: | Size: 234 KiB |
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
Binary file not shown.
After Width: | Height: | Size: 216 KiB |
|
@ -0,0 +1,31 @@
|
||||||
|
import std.stdio : writeln;
|
||||||
|
import std.algorithm : sort;
|
||||||
|
import duck;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
Duck[] ducks = [
|
||||||
|
new Duck("Daffy", 8),
|
||||||
|
new Duck("Dewey", 2),
|
||||||
|
new Duck("Howard", 7),
|
||||||
|
new Duck("Louie", 2),
|
||||||
|
new Duck("Donald", 10),
|
||||||
|
new Duck("Huey", 2)
|
||||||
|
];
|
||||||
|
|
||||||
|
writeln("Before sorting:");
|
||||||
|
display(ducks);
|
||||||
|
|
||||||
|
ducks.sort();
|
||||||
|
|
||||||
|
writeln("\nAfter sorting:");
|
||||||
|
display(ducks);
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(Duck[] ducks)
|
||||||
|
{
|
||||||
|
foreach (val; ducks)
|
||||||
|
{
|
||||||
|
writeln(val);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
module duck;
|
||||||
|
|
||||||
|
import std.conv : to;
|
||||||
|
import std.stdio : writeln;
|
||||||
|
|
||||||
|
class Duck
|
||||||
|
{
|
||||||
|
private string name;
|
||||||
|
private int weight;
|
||||||
|
|
||||||
|
this(string name, int weight)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
override string toString() const @safe pure nothrow
|
||||||
|
{
|
||||||
|
return name ~ " weighs " ~ weight.to!string;
|
||||||
|
}
|
||||||
|
|
||||||
|
int opCmp(const Duck otherDuck) const @safe pure nothrow
|
||||||
|
{
|
||||||
|
if (weight < otherDuck.weight)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (weight == otherDuck.weight)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue