Observer- og Strategy-mønstre
Implementér Observer til håndtering af afhængigheder og Strategy til udskiftelige algoritmer.
Observer- og Strategy-mønstre er en gratis Ren arkitektur og designmønstre i praksis-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Ren arkitektur og designmønstre i praksis, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ren arkitektur og designmønstre i praksis-kurset indeholder 4 lektioner i alt.
Adfærdsmønstre: handlinger og interaktioner
Velkommen til verdenen af adfærdsdesignmønstre! Disse mønstre fokuserer på, hvordan objekter interagerer og kommunikerer, og hjælper med at fordele ansvar effektivt.
De beskriver almindelige kommunikationsmønstre mellem objekter og gør dit system mere fleksibelt og håndterbart.
Observer-mønsteret: besked om ændringer
Først ser vi på Observer-mønsteret. Forestil dig, at du abonnerer på et nyhedsbrev – når en ny udgave udkommer, får du besked! Dette mønster fungerer på samme måde.
- Det definerer en en-til-mange-afhængighed mellem objekter.
- Når ét objekt (Subject) ændrer tilstand, får alle dets afhængige objekter (Observers) automatisk besked og bliver opdateret.
Det er velegnet til hændelseshåndtering og distribuerede systemer.
Observer-komponenter: Subject
Subject (også kendt som Observable) er det objekt, der overvåges. Det har to hovedopgaver:
- Vedligeholde en liste over sine observatører.
- Levere metoder til at tilknytte (tilføje) eller frakoble (fjerne) observatører.
- Give besked til alle tilknyttede observatører, når dets tilstand ændrer sig.
Tænk på det som nyhedsudgiveren.
Observer-komponenter: Observer
Observer er ethvert objekt, der vil have besked om ændringer i Subject. Det definerer en update()-metode.
- Når Subject giver besked, kalder det hver Observers
update()-metode. - Denne metode gør det muligt for Observer at reagere på ændringen, f.eks. ved at hente nye data eller opdatere sin visning.
Det er dine nyhedsbrevsabonnenter!
Observer-mønsteret: udgiver og abonnenter
Lad os se Observer-mønsteret i praksis med en enkel nyhedsudgiver og nogle læsere. NewsPublisher er vores Subject, og NewsReaders er vores Observers.
Prøv at køre koden for at se, hvordan læserne får opdateringer!
import java.util.ArrayList;
import java.util.List;
// Observer Interface
interface Subscriber {
void update(String news);
}
// Subject Class
class NewsPublisher {
private List<Subscriber> subscribers = new ArrayList<>();
private String latestNews;
public void addSubscriber(Subscriber s) {
subscribers.add(s);
}
public void removeSubscriber(Subscriber s) {
subscribers.remove(s);
}
public void publishNews(String news) {
this.latestNews = news;
notifySubscribers();
}
private void notifySubscribers() {
for (Subscriber s : subscribers) {
s.update(latestNews);
}
}
}
// Concrete Observer
class NewsReader implements Subscriber {
private String name;
public NewsReader(String name) {
this.name = name;
}
@Override
public void update(String news) {
System.out.println(name + " received: " + news);
}
}
public class Main {
public static void main(String[] args) {
NewsPublisher publisher = new NewsPublisher();
NewsReader reader1 = new NewsReader("Alice");
NewsReader reader2 = new NewsReader("Bob");
publisher.addSubscriber(reader1);
publisher.addSubscriber(reader2);
publisher.publishNews("Breaking: New programming course released!");
System.out.println("\nAlice unsubscribes...");
publisher.removeSubscriber(reader1);
publisher.publishNews("Update: Course enrollment extended!");
}
}Strategy-mønsteret: valg af algoritmer
Nu ser vi på Strategy-mønsteret. Dette mønster lader dig definere en familie af algoritmer, indkapsle hver enkelt og gøre dem udskiftelige.
Det lader algoritmen variere uafhængigt af de klienter, der bruger den. Tænk på at vælge forskellige betalingsmetoder (kreditkort, PayPal, bankoverførsel) ved betaling.
Strategy-komponenter: Strategy
Strategy er et interface eller en abstrakt klasse, der erklærer en fælles operation for alle understøttede algoritmer.
- Hver specifik algoritme (f.eks.
CreditCardPayment,PayPalPayment) implementerer dette interface. - Det sikrer, at de alle har den samme metodesignatur, så de kan udskiftes med hinanden.
Strategy-komponenter: Context
Context er den klasse, der indeholder en reference til et Strategy-objekt. Den definerer et interface, som klienter kan interagere med.
- Context ved ikke, hvilken konkret strategi den bruger.
- Den overlader udførelsen af algoritmen til sit aktuelle Strategy-objekt.
Det holder Context enkel og fleksibel, fordi den ikke behøver at blive ændret, når der tilføjes nye strategier.
Strategy-mønsteret: betalingsmetoder
Her er et praktisk eksempel på Strategy-mønsteret. Vi har forskellige betalingsstrategier (kreditkort, PayPal) og en ShoppingCart som vores Context.
Bemærk, hvordan ShoppingCart nemt kan skifte mellem betalingsmetoder uden at ændre sin egen grundlæggende logik.
interface PaymentStrategy {
void pay(int amount);
}
class CreditCardPayment implements PaymentStrategy {
private String cardNumber;
public CreditCardPayment(String card) { this.cardNumber = card; }
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " using Credit Card " + cardNumber);
}
}
class PayPalPayment implements PaymentStrategy {
private String email;
public PayPalPayment(String email) { this.email = email; }
@Override
public void pay(int amount) {
System.out.println("Paid " + amount + " using PayPal account: " + email);
}
}
class ShoppingCart {
private PaymentStrategy strategy;
public void setPaymentStrategy(PaymentStrategy strategy) {
this.strategy = strategy;
}
public void checkout(int amount) {
if (strategy == null) {
System.out.println("Please set a payment strategy first.");
return;
}
strategy.pay(amount);
}
}
public class Main {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
// Pay with Credit Card
cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012-3456"));
cart.checkout(100);
// Pay with PayPal
cart.setPaymentStrategy(new PayPalPayment("user@example.com"));
cart.checkout(50);
}
}Hurtigt tjek: Observer eller Strategy?
Forestil dig en applikation til aktiehandel. Den skal beregne handelsgebyrer ved hjælp af forskellige metoder (f.eks. et fast gebyr, en procentdel af handelsværdien eller et trindelt system) baseret på brugerens kontotype. Applikationen skal nemt kunne skifte mellem disse metoder.
Opsummering: Underretning og udskiftning
Godt klaret! Du har udforsket to effektive adfærdsmønstre:
- Observer-mønsteret: Håndterer afhængigheder fra én til mange, hvor et Subject underretter flere Observers om ændringer i tilstanden. Det fremmer løs kobling mellem komponenter.
- Strategy-mønsteret: Gør det muligt at definere en familie af algoritmer, indkapsle hver af dem og gøre dem udskiftelige. Det gør det nemmere at udskifte algoritmer under kørsel og fremmer fleksibel og ren kode.
Disse mønstre hjælper med at gøre din kode mere modulær og fleksibel samt nemmere at vedligeholde!
Lær Ren arkitektur og designmønstre i praksis med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Observer- og Strategy-mønstre” gratis?
Ja — hele teksten til “Observer- og Strategy-mønstre” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Ren arkitektur og designmønstre i praksis-kurset, skal du opgradere til CoddyKit PRO. Ren arkitektur og designmønstre i praksis-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Observer- og Strategy-mønstre”?
Implementér Observer til håndtering af afhængigheder og Strategy til udskiftelige algoritmer. Du øver dig i Ren arkitektur og designmønstre i praksis med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ren arkitektur og designmønstre i praksis?
Der kræves ingen tidligere erfaring. Ren arkitektur og designmønstre i praksis på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Observer- og Strategy-mønstre”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ren arkitektur og designmønstre i praksis-lektion?
Ja. Alle Ren arkitektur og designmønstre i praksis-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Observer- og Strategy-mønstre
- Command- og Iterator-mønstre
- Template Method- og State-mønstre
- Mediator og Chain of Responsibility