Facade- og Proxy-mønstre
Forenkle komplekse delsystemer med Facade, og styr adgangen til objekter med Proxy-mønstret.
Facade- og Proxy-mønstre er en gratis Ren arkitektur og designmønstre i praksis-lektion på CoddyKit. Dette er lektion 2 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.
Velkommen til Facade og Proxy!
I denne lektion dykker du ned i to effektive strukturelle designmønstre: mønstrene Facade og Proxy.
Strukturelle mønstre hjælper dig med at sammensætte objekter og klasser til større strukturer, så systemer bliver mere fleksible og effektive.
Du lærer, hvordan Facade forenkler komplekse systemer, og hvordan Proxy styrer adgangen til objekter.
Mød Facade-mønsteret
Forestil dig en kompleks maskine med mange knapper og håndtag. Facade-mønsteret leverer en enkel, samlet grænseflade til et sæt grænseflader i et delsystem.
- Det definerer en grænseflade på højere niveau, som gør delsystemet lettere at bruge.
- Tænk på det som et forenklet kontrolpanel til et kompliceret system.
Dets vigtigste mål er at reducere kompleksiteten og afkoble klienten fra delsystemets indre funktionalitet.
Håndtering af kompleksitet
Uden en Facade skal en klient måske interagere med mange forskellige klasser og objekter i et delsystem for at udføre en enkelt opgave.
Det fører til:
- Tæt kobling: Klientkode bliver afhængig af alle delsystemets komponenter.
- Øget kompleksitet: Klienter skal vide for meget om delsystemets interne struktur.
- Vanskeligere vedligeholdelse: Ændringer i delsystemets interne dele kan ødelægge klientkode.
Sådan forenkler Facade
Facade-mønsteret introducerer en enkelt Facade-klasse, som omslutter det komplekse delsystem.
Facade-klassen:
- Ved, hvilke delsystemklasser der er ansvarlige for en forespørgsel.
- Uddelegerer klientens forespørgsler til de relevante delsystemobjekter.
- Omdanner komplekse interaktioner til et enkelt metodekald.
Klienter interagerer kun med Facade og ikke med de enkelte delsystemklasser.
Facade i praksis: hjemmebiograf
Lad os se på et enkelt eksempel med et hjemmebiografsystem. I stedet for at tænde fjernsynet, forstærkeren og DVD-afspilleren separat klarer en Facade det hele.
public class Amplifier {
public void on() { System.out.println("Amplifier On"); }
public void setDvd(DvdPlayer dvd) { System.out.println("Amplifier setting DVD"); }
public void setVolume(int volume) { System.out.println("Amplifier volume " + volume); }
public void off() { System.out.println("Amplifier Off"); }
}
public class DvdPlayer {
public void on() { System.out.println("DVD Player On"); }
public void play(String movie) { System.out.println("Playing movie: " + movie); }
public void off() { System.out.println("DVD Player Off"); }
}
public class Television {
public void on() { System.out.println("TV On"); }
public void off() { System.out.println("TV Off"); }
}
// The Facade
public class HomeTheaterFacade {
Amplifier amp;
DvdPlayer dvd;
Television tv;
public HomeTheaterFacade(Amplifier amp, DvdPlayer dvd, Television tv) {
this.amp = amp;
this.dvd = dvd;
this.tv = tv;
}
public void watchMovie(String movie) {
System.out.println("Get ready to watch a movie...");
tv.on();
amp.on();
amp.setDvd(dvd);
amp.setVolume(5);
dvd.on();
dvd.play(movie);
}
public void endMovie() {
System.out.println("Shutting down home theater...");
dvd.off();
amp.off();
tv.off();
}
}
public class Main {
public static void main(String[] args) {
Amplifier amp = new Amplifier();
DvdPlayer dvd = new DvdPlayer();
Television tv = new Television();
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, dvd, tv);
homeTheater.watchMovie("Inception");
System.out.println("---");
homeTheater.endMovie();
}
}Hvorfor bruge Facade?
Facade-mønsteret giver flere vigtige fordele:
- Forenkler klientkode: Klienter behøver ikke lære delsystemets komplekse API.
- Afkobler klienten fra delsystemet: Reducerer afhængigheder og gør systemet mere robust over for ændringer.
- Forbedrer testbarheden: Du kan simulere Facade, så det bliver lettere at teste klientkode.
- Understøtter lagdeling: Hjælper med at strukturere et system i lag med tydelige ansvarsområder.
Introduktion til Proxy-mønsteret
Proxy-mønsteret leverer en stedfortræder eller pladsholder for et andet objekt for at styre adgangen til det.
Tænk på det som en mellemmand. I stedet for at tale direkte med det rigtige objekt taler du med dets proxy.
Proxyen kan tilføje ekstra logik før eller efter adgangen til det rigtige objekt, f.eks. sikkerhedstjek, doven indlæsning eller logning.
Almindelige anvendelser af Proxy
Proxyer er alsidige og bruges i mange situationer:
- Beskyttelsesproxy: Styrer adgangen ud fra tilladelser (f.eks. kan kun godkendte brugere få adgang).
- Virtuel proxy: Opretter ressourcekrævende objekter efter behov (doven indlæsning), hvilket forbedrer ydeevnen.
- Fjernproxy: Repræsenterer et objekt, der befinder sig i et andet adresserum (f.eks. en netværksproxy til en fjernservice).
- Logningsproxy: Logger metodekald til det rigtige objekt.
Proxy i praksis: sikker adgang
Her er et eksempel på en beskyttelsesproxy. En bruger forsøger at få adgang til en følsom database. Proxyen kontrollerer først, om brugeren har administratorrettigheder.
// Subject Interface
interface Database {
void executeQuery(String query);
}
// Real Subject
class RealDatabase implements Database {
public void executeQuery(String query) {
System.out.println("Executing query: " + query);
}
}
// Proxy
class DatabaseProxy implements Database {
private RealDatabase realDatabase;
private String userRole;
public DatabaseProxy(String userRole) {
this.userRole = userRole;
this.realDatabase = new RealDatabase(); // Create real object if needed, or lazily
}
public void executeQuery(String query) {
if (userRole.equals("ADMIN")) {
System.out.println("Proxy: Admin access granted.");
realDatabase.executeQuery(query);
} else {
System.out.println("Proxy: Access denied! Only ADMIN can execute queries.");
}
}
}
public class Main {
public static void main(String[] args) {
Database adminUser = new DatabaseProxy("ADMIN");
adminUser.executeQuery("SELECT * FROM sensitive_data");
System.out.println("---");
Database regularUser = new DatabaseProxy("USER");
regularUser.executeQuery("DELETE FROM sensitive_data");
}
}Hvorfor bruge Proxy?
Proxy-mønsteret giver betydelige fordele:
- Kontrolleret adgang: Kan begrænse eller udvide adgangen til det rigtige objekt.
- Doven initialisering: Udskyder oprettelsen af objektet, indtil der faktisk er brug for det, og sparer dermed ressourcer.
- Abstraktion af fjernadgang: Skjuler kompleksiteten ved at få adgang til objekter på forskellige placeringer.
- Ekstra funktionalitet: Kan tilføje logning, caching eller sikkerhedstjek uden at ændre det rigtige objekt.
Hurtigt tjek: Facade kontra Proxy
Forestil dig, at du har et komplekst bibliotek til billedbehandling med dusinvis af klasser og metoder. Du vil tilbyde dine brugere en enkel funktion som processImage(imageFile).
Hvilket designmønster er bedst egnet til at opnå denne forenkling?
Facade og Proxy: vigtigste pointer
Du har udforsket to effektive strukturelle mønstre:
- Facade-mønsteret leverer en forenklet grænseflade på højt niveau til et komplekst delsystem, så det bliver lettere at bruge og mindre tæt koblet.
- Proxy-mønsteret leverer en stedfortræder eller pladsholder for et andet objekt for at styre adgangen til det og tilføjer logik som sikkerhed, doven indlæsning eller logning.
Begge mønstre forbedrer systemets struktur og vedligeholdelighed ved at håndtere kompleksitet og styre interaktioner mellem objekter.
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 “Facade- og Proxy-mønstre” gratis?
Ja — hele teksten til “Facade- og Proxy-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 “Facade- og Proxy-mønstre”?
Forenkle komplekse delsystemer med Facade, og styr adgangen til objekter med Proxy-mønstret. 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 2 af 4.
Hvor lang tid tager lektionen “Facade- og Proxy-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
- Adapter- og Decorator-mønstre
- Facade- og Proxy-mønstre
- Composite- og Bridge-mønstre
- Flyweight pattern til effektiv hukommelsesbrug