Vyčlení spoločné chovanie do objektu, ktorý ho vykoná pre viac tried.
class Posunutelne { poloha() { throw new Error('abstraktná metóda'); } nastavPolohu(x, y) { throw new Error('abstraktná metóda'); }} class Kruh extends Posunutelne { poloha() { return this.stred; } nastavPolohu(x, y) { this.stred = { x, y }; }} class Obdlznik extends Posunutelne { poloha() { return this.lavyHorny; } nastavPolohu(x, y) { this.lavyHorny = { x, y }; }} // Sluha. Posúvanie nie je ani v kruhu, ani v obdĺžniku — je tu.class Posuvac { posun(tvar, dx, dy) { const p = tvar.poloha(); tvar.nastavPolohu(p.x + dx, p.y + dy); }} const posuvac = new Posuvac();posuvac.posun(kruh, 10, 0);posuvac.posun(obdlznik, 10, 0);