PPaste!

Home - All the pastes - Authored by Thooms

Raw version

  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
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
S̳t̳r̳a̳t̳é̳g̳i̳e̳

1) Comportement difficile à mixer
2) Création d'objets selon les comportement
3) Factorisation non optimisée

Fonction de tri → stratégie multiple

                    ┌───────────────────┐
                    │      Agrégat      │                        <<interface>>
                    ├───────────────────┤                    ┌───────────────────┐
                    │ +setTri(Tri)      │                tri │        Tri        │
                    │ +trier()          │◊------------------>├───────────────────┤
                    │ +setMax(Max)      │                    │+faire(Agregat)    │
                    │ +max()            │                    └───────────────────┘
                    └───────────────────┘                              △
                              ◊                                        |
                              |                                        |
                              |                              ┌───────────────────┐
                        <<interface>>                        │       TriA        │
                    ┌───────────────────┐                    ├───────────────────┤
                    │        Max        │                    │                   │
                    ├───────────────────┤                    └───────────────────┘
                    │+faire(Agregat)    │
                    └───────────────────┘

Agregat::trier() {
    ⋮
    tri.faire(this);
    ⋮
}

Agregat::Agregat() {
    ⋮
    tri = new TriA(); // ← tri par défaut
}

Exemple :
{
    Agregat a = new Agregat();
    // a.setTri(new TriA());
    a.trier();
}

P̳r̳o̳x̳y̳

⎧ Objet distant
⎨ Accès à un objet à sécuriser (délicat)
⎩ Accès à un objet volumineux

→ Se substituer à une autre chose
    ◦ créer une classe proxy ayant la même interface que l'objet réel
    ◦ ajouter une association vers l'objet réel pour lui déléguer l'action réelle

                                           <<interface>>
                                       ┌───────────────────┐
                                       │     LaClasse      │
                                       ├───────────────────┤
                                       │                   │
                                       └───────────────────┘
                                       △                   △
                                      /                     \
                                     /                       \
                                    /                         \
                                   /                           \
                                  /                             \
                                 /                               \
                            <<proxy>>                            |
                      ┌───────────────────┐            ┌───────────────────┐
                      │       Proxy       │            │   LaClasseVrai    │
                      ├───────────────────┤       réel ├───────────────────┤
                      │ +m1()             │----------->│ +m1()             │
                      └───────────────────┘            └───────────────────┘



   ┌───────┐              ┌─────────────┐                 ┌──────────────┐
   │ Appli │              │ proxy:Proxy │                 │ LaClasseVrai │
   └───────┘              └─────────────┘                 └──────────────┘
       ¦                         ¦                                ¦
       ¦       <<create>>        ¦                                ¦
       -------------------------▷⫾                                ¦
       ¦                         ⫾             create             ¦
       ¦                         ⫾-------------------------------▷⫾
       ¦                         ⫾                                ⫾
       ¦          mc1            ⫾                                ⫾
       -------------------------▷⫾                                ⫾
       ¦                         ⫾              mc1()             ⫾
       ¦                         ⫾-------------------------------▷⫾
       ¦                         ⫾                                ⫾
       ¦                         ⫾                                ⫾
       ¦                         ⫾                                ⫾

C̳o̳m̳p̳o̳s̳i̳t̳e̳


                      ⎧ Arbre binaire…
                      ⎨ Gestion des fichiers et dossiers
Représente des arbres ⎨ Arbre des processus
                      ⎨ XML/JSON
                      ⎩ Gestion objet graphique (IHM avec des composants qui en contiennent d'autres)

                                           <<abstract>>
                                       ┌───────────────────┐
                                     * │     Component     │
     ––––––––––––––––––––––––––––––––––├───────────────────┤
     |                        children │ +paint()          │
     |                                 └───────────────────┘
     |                                           △
     |                                           |
     |                     –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––⋯⋯⋯
     |                     |                                   |                       |
     |               <<composite>>                        <<feuille>>             <<feuille>>
     |     ┌──────────────────────────────┐               ┌──────────┐           ┌───────────┐
     |     │             Panel            │               │  Button  │           │ Textfield │
     |     ├──────────────────────────────┤               ├──────────┤           ├───────────┤
     |     │ +addComponent(Component)     │               │ +paint() │           │ +paint()  │
     –––––◊│ +removeComponent(Component)  │               └──────────┘           └───────────┘
           │ +paint()                     │
           │ +getChildren() : Component[] │
           └──────────────────────────────┘

Panel::paint() {
    for(Component c: children) {
        c.paint();
    }
}