Loading AI tools
designmönster inom programmering Från Wikipedia, den fria encyklopedin
Inom klassbaserad programmering är fabriksmetod (factory method på engelska) ett designmönster som använder fabriksmetoder för att hantera problemet med att skapa objekt utan att ange den exakta klassen för objektet som ska skapas. Detta görs genom att skapa objekt genom att anropa en fabriksmetod—som antingen anges i ett gränssnitt och implementeras av underklasser eller implementeras i en basklass och skrivs över av deriverade klasser—istället för att anropa en konstruktor.
Fabriksmetoden bör inte blandas ihop med de mer allmänna begreppen fabriker och fabriksmetoder. Mer grundläggande användningsområden av fabriker är inte exempel på fabriksmetoden, och kan istället hänvisas som fabriksmönstret[1] eller en enkel fabrik.[2]
Fabriksmetoden låter en klass senarelägga instansieringar till underklasser.[3]
Att skapa ett objekt kräver ofta komplexa processer som inte är lämpliga att inkludera i ett objekt som skapas. När objekt skapas kan det leda till att kod dupliceras, vilket kanske kräver information som inte finns tillgänglig för det skapade objektet, som kanske inte ger en tillräcklig abstraktionsnivå, eller kanske annars inte berör det skapade objektet. Fabriksmetoden hanterar dessa problem genom att ange en separat metod för att skapa objekten, som underklasser sedan kan skriva över för att ange deriveringstypen till produkten som ska skapas.
Fabriksmetoden förlitar sig på arv, då underklasser som implementerar fabriksmetoden överlåts till att skapa objekt.[4]
Ett labyrintspel kan spelas i två lägen, ett med vanliga rum som endast är anslutna till angränsande rum, och en med magiska rum som låter spelaren förflyttas på måfå (detta exempel i Java liknar det som finns i boken Design Patterns). Det vanliga spelläget skulle kunna använda denna mallmetod:
public class MazeGame {
public MazeGame() {
Room room1 = makeRoom();
Room room2 = makeRoom();
room1.connect(room2);
this.addRoom(room1);
this.addRoom(room2);
}
protected Room makeRoom() {
return new OrdinaryRoom();
}
}
I koden ovan är konstruktorn MazeGame
en mallmetod. Den hänvisar till fabriksmetoden makeRoom
som kapslar in rumskaparen så att andra rum kan användas i en underklass. För att implementera det andra spelläget som har magiska rum behöver metoden makeRoom
skrivas över:
public class MagicMazeGame extends MazeGame {
@Override
protected Room makeRoom() {
return new MagicRoom();
}
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.