-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New Homework Added
- Loading branch information
Showing
7 changed files
with
192 additions
and
122 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Behavioral Patterns Homework | ||
|
||
* Select 4 behavioral design patterns | ||
* Write a short description (about half page) for each of them | ||
* Describe their motivation, intent, applicability, known uses, implementation, participants, consequences, structure, related patterns, etc. | ||
* Use [Markdown](https://help.github.com/articles/github-flavored-markdown/) for the description (`.md` files) and upload it on your own GitHub | ||
* Prefer Bulgarian language | ||
* Provide your own C# examples for their use | ||
* Provide a UML diagram or image of the pattern |
9 changes: 9 additions & 0 deletions
9
High-Quality-Code/17. Design Patterns/Creational/Abstract-Factory-Pattern.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#[Abstract Factory](https://sourcemaking.com/design_patterns/abstract_factory) | ||
|
||
Този шаблон е подобен на **Simple Factory** и **Factory** шаблоните с тази разлика, че **Abstract Factory** предоставя интерфейс за създаване на няколко свързани обекта (>фамилия от обекти) вместо само един. Самите обекти могат или да са абстрактни или да не са, като потребителят използващ интерфейса не знае конкретния им клас. | ||
|
||
**Abstract Factory** се използва: | ||
|
||
* В системи, които се променят често | ||
|
||
Шаблонът предоставя гъвкав механизъм, чрез който да се подменят различни множества от обекти. |
16 changes: 16 additions & 0 deletions
16
High-Quality-Code/17. Design Patterns/Creational/Builder-Pattern.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#[Builder](https://sourcemaking.com/design_patterns/builder) | ||
|
||
Използва се за разделяне на сложната логика по създаването на обект от конкретното му представяне. По този начин могат да се създават обекти с различно представяне използвайки едни и същи стъпки. Самите стъпки са капсулирани. | ||
|
||
1.**Builder** шаблонът решава 3 основни проблема: | ||
|
||
* Скрива от потребителя всички параметри нужни за създаването на конкретен обект | ||
* Енкапсулира стъпките и техният ред, така че да не трябва да се помни | ||
* Скрива от потребителя всички възможни представяния на даден обект | ||
|
||
2.Шаблонът има следните елементи: | ||
|
||
* **Director** – дефинира точната последователност от стъпки. Използва **Builder**. | ||
* **Builder** – дефинира всички стъпки. Използва се от **Concrete Builder**. | ||
* **Concrete Builder** – определя изпълнението. Имплементира **Director**. | ||
* **Product** – създава се от **Concrete Builder**. Продуктите са от еднакъв тип, но съдържат различни данни. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Creational Patterns Homework | ||
|
||
* Select 3 creational design patterns | ||
* Write a short description (about half page) for each of them | ||
* Describe their motivation, intent, applicability, known uses, implementation, participants, consequences, structure, related patterns, etc. | ||
* Use [Markdown](https://help.github.com/articles/github-flavored-markdown/) for the description (`.md` files) and upload it on your own GitHub | ||
* Prefer Bulgarian language | ||
* Provide your own C# examples for their use | ||
* Provide a UML diagram or image of the pattern |
20 changes: 20 additions & 0 deletions
20
High-Quality-Code/17. Design Patterns/Creational/Singleton-Pattern.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#[Singleton](https://sourcemaking.com/design_patterns/singleton) | ||
|
||
Шаблонът се използва, за да се гарантира че един клас има само една единствена инстанция която може да се достъпи глобално. Също така в класа се капсулира инициализацията на обекта при първото му поискване. | ||
|
||
**Singleton** шаблонът трябва да съдържа следните елементи: | ||
|
||
1. Поле, което да пази инстанцията на класа. То трябва да е с модификатори за достъп *private* и *static*. | ||
|
||
2. Празен конструктор без параметри с ниво на достъп *protected*/*private*. Това се прави цел класа да не може да се инстанцира извън себе си и наследниците си и да не се създаде празен публичен конструктор. Така се гарантира, че класът ще има едиснтвена инстанция. | ||
|
||
3. Публичен метод или публично пропърти, чрез които да се осигурява достъп до конструктора на класа, за да се създаде нова негова инстанция. Използва се късна инициализация, за да се създаде инстанция само при поискване и само ако такава все още не съществува. | ||
|
||
|
||
Шаблонът има някои недостатъци като: | ||
|
||
- Нарушава *Single Responsibility* принципа. В рамките на един клас се съчетават две отговорности (гарантира се единствена инстанция и се осигурява достъпът до нея) | ||
|
||
- Внася тясна свързаност м/у себе си и всеки клас, който го използва. Класовете използващи **Singleton** класът не могат да съществуват самостоятелно и независимо от него. | ||
|
||
- Не е сигурен в многонишкова среда. Причината е за това е, че две (или повече нишки) могат да достъпят едновременно проверката, дали съществува инстанция на класа и едновремнно да я изчислят като невярна. В този случай ще се създадат две инстанции на **Singleton** класа, което нарушава шаблона. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Structural Patterns Homework | ||
|
||
* Select 3 structural design patterns | ||
* Write a short description (about half page) for each of them | ||
* Describe their motivation, intent, applicability, known uses, implementation, participants, consequences, structure, related patterns, etc. | ||
* Use [Markdown](https://help.github.com/articles/github-flavored-markdown/) for the description (`.md` files) and upload it on your own GitHub | ||
* Prefer Bulgarian language | ||
* Provide your own C# examples for their use | ||
* Provide a UML diagram or image of the pattern |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters