Middle
Кои шаблони за дизайн, освен Singleton, сте използвали?
sobes.tech AI
Отговор от AI
- Factory Method. Използвах го за създаване на обекти без явното указване на конкретен тип клас. Полезен е, когато логиката за създаване на обекта зависи от подкласове.
- Abstract Factory. Използвах го за създаване на семейства свързани или зависими обекти, предоставяйки интерфейс за това, но без да посочвам конкретни класове.
- Builder. Използвах го за стъпково създаване на сложни обекти, където редът и комбинацията от стъпки могат да варират. Позволява да се избегне "телескопичен конструктор".
- Observer. Реализирах го за създаване на зависимости "един към много" между обекти, където промяната в състоянието на един обект автоматично уведомява всички зависими обекти.
- Strategy. Използвах го за дефиниране на семейство алгоритми, инкапсулиране на всеки от тях и осигуряване на тяхната взаимозаменяемост. Позволява избор на алгоритъм по време на изпълнение.
- Decorator. Използвах го за динамично добавяне на нови отговорности към обекти без да променям тяхната структура.
- Proxy. Използвах го в случаи, когато е необходимо да се контролира достъп до обект, например за лениво зареждане или осигуряване на отдалечен достъп.
- Template Method. Използвах го за определяне на скелета на алгоритъм в суперклас, позволявайки на подкласовете да пренаписват определени стъпки без да променят основната структура.
- Adapter. Използвах го за преобразуване на интерфейса на един клас в интерфейса, очакван от клиентите. Позволява работа с класове с несъвместими интерфейси.
- Command. Използвах го за инкапсулиране на заявка като обект, позволявайки параметризиране на клиенти с различни заявки, поставяне на заявки в опашка или водене на лог на операции, както и поддържане на отмяна на операции.
Пример за реализация на Factory Method:
// Интерфейс на продукта
interface Product {
void doSomething();
}
// Конкретни продукти
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Прави нещо в Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Прави нещо в Product B");
}
}
// Интерфейс на фабриката
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Конкретни фабрики
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}