Middle
Milliseid disainimustreid, välja arvatud Singleton, olete kasutanud?
sobes.tech AI
Vastus AI-lt
- Factory Method. Kasutasin seda objektide loomisel ilma otseselt konkreetse klassi tüüpi määramata. Kasulik, kui objekti loomise loogika sõltub alamklassidest.
- Abstract Factory. Kasutasin seda seotud või sõltuvate objektide perekondade loomisel, pakkudes selle jaoks liidest, kuid mitte määrates konkreetseid klasse.
- Builder. Kasutasin seda keeruliste objektide samm-sammult loomisel, kus sammude järjekord ja kombinatsioonid võivad varieeruda. See aitab vältida "teleskoopset konstruktorit".
- Observer. Olen seda rakendanud, et luua sõltuvusi "üks mitme vahel" objektide vahel, kus ühe objekti oleku muutmine teavitab automaatselt kõiki sõltuvaid objekte.
- Strategy. Kasutasin seda algoritmide perekonna määratlemiseks, nende kapseldamiseks ja nende vahetatavuse tagamiseks. See võimaldab valida algoritmi jooksvalt.
- Decorator. Kasutasin seda, et dünaamiliselt lisada uusi kohustusi objektidele ilma nende struktuuri muutmata.
- Proxy. Kasutasin seda olukordades, kus on vaja kontrollida juurdepääsu objekti, näiteks laiska laadimise või kaugjuurdepääsu tagamiseks.
- Template Method. Kasutasin seda algoritmi skeleti määratlemiseks superklassis, võimaldades alamklassidel üle kirjutada teatud samme ilma põhistruktuuri muutmata.
- Adapter. Kasutasin seda, et teisendada ühe klassi liides klientide ootuspäraseks. See võimaldab töötada mittesobivate liidestega klassidega.
- Command. Kasutasin seda päringu kapseldamiseks objektina, võimaldades klientide parametriseerimist erinevate päringutega, päringute järjekorda panemist või operatsioonide logi pidamist ning tühistamise toetust.
Näide Factory Method'i rakendamisest:
// Toote liides
interface Product {
void doSomething();
}
// Konkreetsete toodete näited
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Teeb midagi Product A-s");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Teeb midagi Product B-s");
}
}
// Tootja liides
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Konkreetsete tootjate näited
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}