Middle
Welke ontwerppatronen, naast Singleton, hebt u gebruikt?
sobes.tech AI
Antwoord van AI
- Factory Method. Gebruikt om objecten te maken zonder expliciet het specifieke klassetype aan te geven. Handig wanneer de logica voor het maken van een object afhangt van subklassen.
- Abstracte Fabriek. Gebruikt voor het maken van families van gerelateerde of afhankelijke objecten, door een interface te bieden, maar zonder specifieke klassen aan te geven.
- Builder. Gebruikt voor het stapsgewijs maken van complexe objecten, waarbij de volgorde en combinatie van stappen kunnen variëren. Vermijdt de "telescoop-constructeur".
- Observer. Geïmplementeerd om "een-op-veel" afhankelijkheden tussen objecten te creëren, waarbij een verandering in de toestand van één object automatisch alle afhankelijke objecten op de hoogte stelt.
- Strategy. Toegepast om een familie van algoritmen te definiëren, elk te encapsuleren en hun vervangbaarheid te garanderen. Maakt het mogelijk om het algoritme tijdens runtime te kiezen.
- Decorator. Gebruikt om dynamisch nieuwe verantwoordelijkheden aan objecten toe te voegen zonder hun structuur te wijzigen.
- Proxy. Gebruikt in gevallen waar controle over toegang tot een object nodig is, bijvoorbeeld voor lazy loading of remote toegang.
- Template Method. Gebruikt om het skelet van een algoritme in de superklasse te definiëren, zodat subklassen bepaalde stappen kunnen overschrijven zonder de hoofdstructuur te veranderen.
- Adapter. Gebruikt om de interface van een klasse te transformeren naar de interface die door clients wordt verwacht. Maakt het mogelijk dat klassen met incompatibele interfaces samenwerken.
- Command. Gebruikt om een verzoek te encapsuleren als een object, waardoor het mogelijk is om clients te parametriseren met verschillende verzoeken, verzoeken in een wachtrij te plaatsen of een log van operaties bij te houden, en undo-functionaliteit te ondersteunen.
Voorbeeld van implementatie van Factory Method:
// Product interface
interface Product {
void doSomething();
}
// Concrete producten
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Doet iets in Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Doet iets in Product B");
}
}
// Fabriek interface
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Concrete fabrikken
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}