Factory method designmönster
Hej!
Håller på att försöka rita ett UML-diagram över hur Factory method designmönstret fungerar och har detta just nu: https://go.gliffy.com/go/share/sm4frpobsubifu6j6jv8 . Men är det något som saknas eller finns allting med som ska finnas med för att beskriva hur designmönstret fungerar? Eller saknar jag någon metod i någon klass?
Jag tror jag har fått med allt, har ett interface, en konkret klass ConcreteProduct, sen factoryn ConcreteCreator som genererar objekten och sen Creator som är ett exempel på en klass man skriver för att implementera och använda factoryn. Håller ni med eller saknar jag något?
Kan ju börja med att säga att jag inte är speciellt bra på UML, men det jag tänker på är iaf följande.
Det framgår inte att Creator är en abstrakt klass, samt att det inte framgår att metoden FactoryMethod är en abstrakt metod.
Du behöver senare inte heller ha någon metod som heter getProperties i Product interfacet och tänk på att metoderna ska returnera Product med stort P och inte product med litet p.
Stokastisk skrev :Kan ju börja med att säga att jag inte är speciellt bra på UML, men det jag tänker på är iaf följande.
Det framgår inte att Creator är en abstrakt klass, samt att det inte framgår att metoden FactoryMethod är en abstrakt metod.
Du behöver senare inte heller ha någon metod som heter getProperties i Product interfacet och tänk på att metoderna ska returnera Product med stort P och inte product med litet p.
Okej tack för svar. Men Creator måste inte vara en abstrakt klass väl? Du kanske tänker på Abstract Factory Pattern. Finns ett som heter det och ett Factory Method Pattern. Ska fixa så den returnerar Product och inte product. Men är det inte bra att ha getProperties() metoden så jag har någon metod där? Blir så tomt i UML-diagrammet om jag inte har någon metod eller variabel i interfacet och i konkreta klassen.
Jo det kanske blir lite tomt i UML diagrammet utan det, men det blir ju inget som riktigt är nödvändigt för själva patternet, men det kanske man förstår ändå.
Nej, jag tänker inte på Abstract factory pattern. Utan i Factory metod så blir väl det mest naturliga att man har en metod som är abstract i klassen och sedan får subklasser se till att implementera den metoden. Vilket alltså innebär att Creator klassen måste vara abstrakt. Men det är klart, det måste inte vara så, så det är nog inget direkt fel att inte ha den som en abstrakt metod.
Stokastisk skrev :Jo det kanske blir lite tomt i UML diagrammet utan det, men det blir ju inget som riktigt är nödvändigt för själva patternet, men det kanske man förstår ändå.
Nej, jag tänker inte på Abstract factory pattern. Utan i Factory metod så blir väl det mest naturliga att man har en metod som är abstract i klassen och sedan får subklasser se till att implementera den metoden. Vilket alltså innebär att Creator klassen måste vara abstrakt. Men det är klart, det måste inte vara så, så det är nog inget direkt fel att inte ha den som en abstrakt metod.
Okej då är jag med, tror jag kör på det jag hade där för fanns ett liknande exempel på en annan sida hittade jag. Tack för inputen! :)
Stokastisk skrev :Jo det kanske blir lite tomt i UML diagrammet utan det, men det blir ju inget som riktigt är nödvändigt för själva patternet, men det kanske man förstår ändå.
Nej, jag tänker inte på Abstract factory pattern. Utan i Factory metod så blir väl det mest naturliga att man har en metod som är abstract i klassen och sedan får subklasser se till att implementera den metoden. Vilket alltså innebär att Creator klassen måste vara abstrakt. Men det är klart, det måste inte vara så, så det är nog inget direkt fel att inte ha den som en abstrakt metod.
Kom på en sak. Är det rätt med pilen från ConcreteCreator till Creator eller ska den vara åt andra hållet?
Pilen går i rätt riktning, det är ConcreteCreator som ärver från Creator.
Stokastisk skrev :Pilen går i rätt riktning, det är ConcreteCreator som ärver från Creator.
Har en fråga som är kopplad till Factory method. Om man har den här klassen t.ex: https://pastebin.com/aqGnbjR3 och sen för att skapa en ny factory för varje resource så gör man en sån här klass t.ex: https://pastebin.com/p4b3YgmV . Jag tänkte mig att detta är Factory Method implementerat men verkar googla lite om det och det slår mig lite om det inte är en variant av Abstract Factory Pattorn? Men är inte med på varför det skulle kanske kunna vara det isåfall, vet du?