Skip to contentMethod: holePrioritaet()
      1: package auftraege.auftragsBildungsParameter.abstraction;
2: 
3: import auftraege.auftragsBildungsParameter.FarbDruckTypMischbar;
4: import auftraege.auftragsBildungsParameter.SimplexDuplexMischbar;
5: 
6: /**
7:  * Ein Strategie-Parameter gibt eine Eigenschaft an, durch die Kundenaufträge zu Produktionsaufträge zusammengefasst
8:  * werden können. Beispielsweise: Farbe- und SchwarzWeiß-Kundenaufträgen.
9:  */
10: public interface StrategieParameter extends ProduktionsauftragsParameter {
11: 
12:     /**
13:      * Liefert die Singleton-Instanz eines Konkreten Strategieparameter.
14:      *
15:      * @param param Name der Klasse als String. Aktuell erlaubte Werte hierfür sind:
16:      *              {@code FarbDruckTypMischbar} und {@code SimplexDuplexMischbar}.
17:      * @return Konkreter Strategieparameter, abhängig von {@code param}.
18:      * Wirft eine {@link IllegalArgumentException}, wenn ein ungültiger String als Parameter übergeben wird.
19:      */
20:     static StrategieParameter create(final String param) {
21:         switch (param) {
22:             case "FarbDruckTypMischbar":
23:                 return FarbDruckTypMischbar.INSTANCE;
24:             case "SimplexDuplexMischbar":
25:                 return SimplexDuplexMischbar.INSTANCE;
26:             default:
27:                 throw new IllegalArgumentException("Der Parameter [" + param + "] konnte nicht interpretiert werden.");
28:         }
29:     }
30: 
31:     /**
32:      * accept-Operation für einen StrategieParameterVisitor.
33:      *
34:      * @param v   visitor.
35:      * @param <T> Typ des Return-values.
36:      * @return liefert ein T.
37:      */
38:     <T> T accept(StrategieParameterVisitor<T> v);
39: 
40:     /**
41:      * je höher die Priorität, desto wichtiger ist dieser Parameter.
42:      *
43:      * @return die Priorität des Parameters
44:      */
45:     default int holePrioritaet() {
46:         return this.accept(new StrategieParameterVisitor<Integer>() {
47: 
48:             @Override
49:             public Integer handle(final FarbDruckTypMischbar farbDruckTypMischbar) {
50:                 return 1;
51:             }
52: 
53:             @Override
54:             public Integer handle(final SimplexDuplexMischbar simplexDuplexMischbar) {
55:                 return 2;
56:             }
57: 
58:         });
59:     }
60: }