hildalange / TDA553-lab1

0 stars 0 forks source link

Violation of the Law of Demeter #30

Open I-Hansson opened 1 year ago

I-Hansson commented 1 year ago

https://github.com/hildalange/TDA553-lab1/blob/ae6c4d33971f9c05b31e0d6b7de7f90ae1b0bce3/src/java/CarController.java#L32-L34

johannaavlund commented 1 year ago

Tänker att man kan göra en CarFactory men lite osäker på om denna skall vara en interface och implementeras av Vehicle, eller en klass. Min tanke är att använda FactoryPattern och på så sätt hämta olika bilar i CarControllor som då läggs in i vehicles listan där.

Har just nu skapat en ICarFactory med en metod getCar(), och denna interface implementeras av Vehicle. I carcontroller tar jag in denna interface genom; ICarFactory Saab95 = new Saab95; men jag hade velat göra den här mer ''oberoende'' av de olika klasserna. Till exempel: ICarFactory car = new Vehicle; (men vet att jag inte kan skapa en ny bil av Vehicle då den är abstrakt)

för tanken är att man sedan i CarController kallar på Factory klassen som skapar en bil, och om den redan finns så kollar den på nästa.

Tänker jag helt fel? :)

I-Hansson commented 1 year ago

Att skapa en CarFactory hjälper om ni vill åtgärda Law of demeter. Det man skulle kunna göra är att skapa en listan med dem bilar ni vill skriva ut på skärmen. Sedan ger ni den listan till carController när man skapar en instans av carController i main. Så det ni behöver göra är att skapa en konstruktor i carController som tar in en lista med vehicle som parameter.

Det sättet ni implementerar CarFactory är inte riktigt rätt, det man gör är att skapa en klass med statiska metoder som returnerar ett fordon. Här kan ni läsa mer om det: https://www.tutorialspoint.com/design_pattern/factory_pattern.htm (här använder dem inte statiska metoder) eller på slidesen som robin har lagt ut.