Hallo,
Ik ben me op mijn werk wat aan het verdiepen in design patterns.
We hebben nu een programmeer opdracht en ik dacht voor de structuur aan het abstract factory pattern maar ik snap een aantal dingen niet goed en vraag me daarom af of het pattern in mijn geval wel de juiste oplossing is en of er misschien een ander pattern is dat beter aansluit.
Het probleem:
We gaan een file based queue maken en om de files te schrijven heb ik 2 verschillende implementaties nodig van de filewriter.
De client (queuehandler) moet dus kiezen welke instantie te maken van de filewriter.
ik heb de volgende classen
De abstracte factory en de concrete factories:
Wat ik nu niet echt begrijp is het volgende:
- als ik nu de specifieke MetaFileWriter methode aan wil roepen dan moet ik het ding alsnog casten naar een MetaFileWriter. (ik ben dus niet veel opgeschoten door het factory pattern in te zetten)
- Ik kan toch net zo goed het volgende doen?
Ik ga er dus eigenlijk vanuit dat het factory pattern niet van toepassing is op mijn situatie, of toch wel?
En wat is dan het voordeel van dit pattern?
En hoe voorkom ik dat ik alsnog moet gaan casten?
Of is er een ander pattern dat beter van toepassing is op mijn situatie?
Dank je! ik hoop dat jullie me wat meer begrip kunnen geven design patterns!
Ik ben me op mijn werk wat aan het verdiepen in design patterns.
We hebben nu een programmeer opdracht en ik dacht voor de structuur aan het abstract factory pattern maar ik snap een aantal dingen niet goed en vraag me daarom af of het pattern in mijn geval wel de juiste oplossing is en of er misschien een ander pattern is dat beter aansluit.
Het probleem:
We gaan een file based queue maken en om de files te schrijven heb ik 2 verschillende implementaties nodig van de filewriter.
De client (queuehandler) moet dus kiezen welke instantie te maken van de filewriter.
ik heb de volgende classen
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| public abstract class QueueItemWriter { public abstract void WriteItem(); } public class ContentWriter : QueueItemWriter { public void ContentWriterMethod() { } public override void WriteItem() { } } public class MetaWriter : QueueItemWriter { public void MetaWriterMethod() { } public override void WriteItem() { } } |
De abstracte factory en de concrete factories:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| //abstract factory public abstract class QueueItemWriterFactory { public abstract QueueItemWriter CreateQueueItemWriter(); } //concrete factory 1 public class MetaFileWriterFactory : QueueItemWriterFactory { public override QueueItemWriter CreateQueueItemWriter() { return new MetaFileWriter(); } } //concrete factory 2 public class ContentFileWriterFactory : QueueItemWriterFactory { public override QueueItemWriter CreateQueueItemWriter() { return new ContentFileWriter(); } } |
Wat ik nu niet echt begrijp is het volgende:
- als ik nu de specifieke MetaFileWriter methode aan wil roepen dan moet ik het ding alsnog casten naar een MetaFileWriter. (ik ben dus niet veel opgeschoten door het factory pattern in te zetten)
- Ik kan toch net zo goed het volgende doen?
C#:
1
2
3
4
5
6
| public void SomeMethod(object content, object meta) { MetaFileWriter metaFileWriter = new MetaFileWriter(); } |
Ik ga er dus eigenlijk vanuit dat het factory pattern niet van toepassing is op mijn situatie, of toch wel?
En wat is dan het voordeel van dit pattern?
En hoe voorkom ik dat ik alsnog moet gaan casten?
Of is er een ander pattern dat beter van toepassing is op mijn situatie?
Dank je! ik hoop dat jullie me wat meer begrip kunnen geven design patterns!
[ Voor 25% gewijzigd door 4of9 op 23-03-2007 12:24 ]
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...