Skip to content

Commit d6fbc0b

Browse files
committed
Final version with multithreading
0 parents  commit d6fbc0b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+2131
-0
lines changed

.gitignore

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
### IntelliJ IDEA ###
2+
out/
3+
!**/src/main/**/out/
4+
!**/src/test/**/out/
5+
6+
### Eclipse ###
7+
.apt_generated
8+
.classpath
9+
.factorypath
10+
.project
11+
.settings
12+
.springBeans
13+
.sts4-cache
14+
bin/
15+
!**/src/main/**/bin/
16+
!**/src/test/**/bin/
17+
18+
### NetBeans ###
19+
/nbproject/private/
20+
/nbbuild/
21+
/dist/
22+
/nbdist/
23+
/.nb-gradle/
24+
25+
### VS Code ###
26+
.vscode/
27+
28+
### Mac OS ###
29+
.DS_Store

.idea/.gitignore

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DOC_Version_Control.iml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
</content>
8+
<orderEntry type="inheritedJdk" />
9+
<orderEntry type="sourceFolder" forTests="false" />
10+
</component>
11+
</module>

README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# 📚 Лабораторные работы по курсу «Шаблоны проектирования программного обеспечения»
2+
3+
В этом репозитории мы последовательно выполняем три лабораторные работы. На данный момент **выпущен релиз ЛР 1**. Задачи ЛР 2 и ЛР 3 описаны ниже — их реализация и релизы будут сделаны позже.
4+
5+
---
6+
7+
## 🔖 ЛР 1 (Java + Swing)
8+
**Тема:** «Модель документа с полной историей изменений»
9+
**Технологии:** Java 23 + Swing
10+
**Паттерны:** ≥ 6 классических GoF (Factory Method, Singleton, Decorator, Command, Memento, Observer)
11+
12+
**Краткое содержание:**
13+
1. **Document** + три типа (`Text`, `PDF`, `Spreadsheet`) через Factory Method
14+
2. История изменений с Undo/Redo/Jump (Memento + Caretaker)
15+
3. Команды для действий пользователя (Command + Invoker)
16+
4. Расширения через Decorator: шифрование содержимого и логирование операций (Singleton для сбора логов)
17+
5. Автоматическое обновление интерфейса и консоли (Observer)
18+
19+
👉 Готовый релиз первой лабораторной:
20+
[v1-lab-patterns](https://github.com/AntGalanin06/DOC_Version_Control/releases/tag/v1-lab-patterns)
21+
22+
---
23+
24+
## 🔖 ЛР 2 (Spring + AOP)
25+
26+
**Тема:** «IoC и DI средствами Spring Framework. AOP»
27+
**Технологии:** Java 23 + Spring Framework
28+
**Паттерны:** IoC/DI, AOP, Factory Method, Decorator, Memento, Observer, Command
29+
30+
**Краткое содержание:**
31+
32+
1. **Вынесение инфраструктуры под Spring IoC:**
33+
— Фабрики документов, логгер истории, GUI, декоратор-шифратор, аспект логирования определены как Spring Bean с нужным Scope
34+
2. **Внедрение зависимостей (DI):**
35+
— Все зависимости подаются через конструктор или ObjectProvider
36+
— Документы и команды создаются вручную (POJO), не являются бинами
37+
3. **AOP-логирование операций:**
38+
— Ключевые методы помечены аннотацией `@Loggable`, для них применяется аспект логирования
39+
— Аспект прозрачно собирает и выводит логи в интерфейс
40+
4. **Контекст Spring создаётся и закрывается только в `main()`, остальной код работает только через DI**
41+
42+
👉 Реализация и релиз лабораторной появятся после завершения разработки.
43+
44+
---
45+
46+
## 🔖 ЛР 3
47+
**Тема:** «Основы многопоточности в Java»
48+
**Задача:**
49+
- Доработать систему ЛР 1 (Spring-часть оставить в покое) для демонстрации Concurrency.
50+
- Реализовать **одну** из рекомендуемых задач:
51+
- Клиент-серверное взаимодействие с генераторами запросов, очередью и исполнителями
52+
- Задачу о «спящих брадобреях» (`Sleeping Barber Problem`)
53+
- Организовать потоки, критические секции, защиту (synchronized / Lock), взаимодействие потоков через `wait/notify` или `BlockingQueue`.
54+
55+
**Отчёт должен содержать:**
56+
- Титульный лист и текст варианта
57+
- UML-диаграмму классов
58+
- Описание решаемой задачи
59+
- Описание компонентов, критических секций, схем взаимодействия потоков
60+
- Скриншоты работы в терминале
61+
- Листинг кода (Consolas 10, без комментариев)
62+
63+
*(Релиз ЛР 3 будет опубликован после завершения разработки.)*
64+
65+
---

docs/img/1_1.png

152 KB
Loading

docs/img/1_2.png

31.1 KB
Loading

docs/img/1_3.png

154 KB
Loading

0 commit comments

Comments
 (0)