Skip to content

Commit 67ec728

Browse files
committed
Composite
1 parent 0554437 commit 67ec728

File tree

2 files changed

+86
-3
lines changed

2 files changed

+86
-3
lines changed

Composite.js

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Composite is a structural pattern.
2+
// Компоновщик - структурный шаблон проектирования.
3+
4+
class Structure {
5+
getName() {
6+
return this.name || 'unnamed';
7+
}
8+
9+
setName(name) {
10+
this.name = name;
11+
}
12+
13+
getPrice() {
14+
return this.price || 0;
15+
}
16+
17+
setPrice(price) {
18+
this.price = price;
19+
}
20+
}
21+
22+
class Box extends Structure {
23+
constructor() {
24+
super();
25+
this.setName('Box');
26+
this.setPrice(700);
27+
}
28+
}
29+
30+
class Shelf extends Structure {
31+
constructor() {
32+
super();
33+
this.setName('Shelf');
34+
this.setPrice(300);
35+
}
36+
}
37+
38+
class Door extends Structure {
39+
constructor() {
40+
super();
41+
this.setName('Door');
42+
this.setPrice(200);
43+
}
44+
}
45+
46+
class Composite extends Structure {
47+
constructor() {
48+
super();
49+
this.structures = [];
50+
}
51+
52+
add(structure) {
53+
this.structures.push(structure);
54+
}
55+
56+
getPrice() {
57+
return this.structures.map(structure => structure.getPrice()).reduce((a, b) => a + b);
58+
}
59+
}
60+
61+
class KitchenCabinet extends Composite {
62+
constructor() {
63+
super();
64+
this.setName('Ikea');
65+
}
66+
}
67+
68+
const myKitchenCabinet = new KitchenCabinet();
69+
myKitchenCabinet.add(new Box());
70+
myKitchenCabinet.add(new Shelf());
71+
myKitchenCabinet.add(new Door());
72+
73+
console.log(`Kitchen cabinet: ${myKitchenCabinet.getName()}, Price: $${myKitchenCabinet.getPrice()}`);

README.md

+13-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
## Design Patterns
44

5-
### Creational design patterns (Порождающие шаблоны проектирования):
5+
_Design Pattern (Шаблон проектирования) - шаблон проектирования или паттерн в разработке программного обеспечения, повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код, это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться._
6+
7+
### Creational design patterns (Порождающие шаблоны проектирования)
8+
9+
_Creational design patterns (Порождающие шаблоны проектирования) - шаблоны проектирования, которые имеют дело с процессом создания объектов. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять наследуемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. Эти шаблоны оказываются важны, когда система больше зависит от композиции объектов, чем от наследования классов. Получается так, что основной упор делается не на жестком кодировании фиксированного набора поведений, а на определении небольшого набора фундаментальных поведений, с помощью композиции которых можно получать любое число более сложных. Таким образом, для создания объектов с конкретным поведением требуется нечто большее, чем простое инстанцирование класса._
610

711
- **Singleton** _- одиночка, порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру._
812

@@ -14,7 +18,9 @@
1418

1519
- **Builder** _- строитель, порождающий шаблон проектирования предоставляет способ создания составного объекта. Отделяет конструирование сложного объекта от его представления так, что в результате одного и того же процесса конструирования могут получаться разные представления._
1620

17-
### Structural design patterns (Структурные шаблоны проектирования):
21+
### Structural design patterns (Структурные шаблоны проектирования)
22+
23+
_Structural design patterns (Структурные шаблоны проектирования) - шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры. Структурные шаблоны уровня класса используют наследование для составления композиций из интерфейсов и реализаций. Простой пример - использование множественного наследования для объединения нескольких классов в один. В результате получается класс, обладающий свойствами всех своих родителей. Особенно полезен этот шаблон, когда нужно организовать совместную работу нескольких независимо разработанных библиотек._
1824

1925
- **Decorator** _- декоратор, структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности._
2026

@@ -24,7 +30,11 @@
2430

2531
- **Adapter** _- адаптер, структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс. Другими словами - это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе._
2632

27-
### Behavioral design patterns (Поведенческие шаблоны проектирования):
33+
- **Composite** _- компоновщик, структурный шаблон проектирования, объединяющий объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково._
34+
35+
### Behavioral design patterns (Поведенческие шаблоны проектирования)
36+
37+
_Behavioral design patterns (Поведенческие шаблоны проектирования) - шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов. В поведенческих шаблонах уровня класса используется наследование, чтобы определить поведение для различных классов. В поведенческих шаблонах уровня объекта используется композиция. Некоторые из них описывают, как с помощью кооперации несколько равноправных объектов работают над заданием, которое они не могут выполнить по отдельности. Здесь важно то, как объекты получают информацию о существовании друг друга. Объекты-коллеги могут хранить ссылки друг на друга, но это усиливает степень связанности системы. При высокой связанности каждому объекту пришлось бы иметь информацию обо всех остальных. Некоторые из шаблонов решают эту проблему._
2838

2939
### Common JavaScript design patterns (Общие шаблоны проектирования JavaScript):
3040

0 commit comments

Comments
 (0)