| 
 abstract 
class X { 
    abstract T1 f(...); 
    T2 g(...) { 
        ... f(...) ...; 
    } 
} 
class Y extends X { 
    T1 f(...) { 
        ... ; 
    } 
} 
X x1 = new Y(...); 
... x1.g(...) ... 
 | 
    
| 
          Über f wird mit Hilfe von Vererbung über X variiert.
 
       | 
    |
| 
          Anzahl Klassen?
 
       | 
    |
| 
          Zur Laufzeit: Anzahl Objekte?
 
       | 
    
| 
 class X { 
    Cmd c; 
    X(Cmd c1) { c = c1; } 
    T2 g(...) { 
        ... c.f(...) ...; 
    } 
} 
abstract 
class Cmd { 
    abstract T1 f(...); 
} 
class C1 extends Cmd { 
    T1 f(...) { 
        ...; 
    } 
} 
X x1 = new X(new C1(),...); 
... x1.g(...) ... 
 | 
    
| 
          Über f wird mit Hilfe von Vererbung über Cmd und einem Parameter im Konstruktor von X variiert.
 
       | 
    |
| 
          Anzahl Klassen?
 
       | 
    |
| 
          Zur Laufzeit: Anzahl Objekte?
 
       | 
    
| 
 class X { 
    T2 g(Cmd c, ...) { 
        ... c.f(...) ...; 
    } 
} 
abstract 
class Cmd { 
    abstract T1 f(...); 
} 
class C1 extends Cmd { 
    T1 f(...) { 
        ...; 
    } 
} 
X x1 = new X(...); 
... x1.g(new C1(), ...) ... 
 | 
    
| 
          Über f wird mit Hilfe von Vererbung über Cmd und einem zusätzlichen Parameter in g variiert.
 
       | 
    |
| 
          Anzahl Klassen?
 
       | 
    |
| 
          Zur Laufzeit: Anzahl Objekte?
 
       | 
    |
| 
          Vorteile gegenüber Strategie?
 
       | 
    |
| 
          Nachteile gegenüber Strategie?
 
       | 
    |
| 
          Nachteile gegenüber Strategie?
 
       | 
    
| Letzte Änderung: 20.06.2013 | © Prof. Dr. Uwe Schmidt |