Che cosa significano i dettagli dell'incapsulamento di istanziazione nel modello di progettazione di fabbrica?

0

Sto cercando di capire il modello di progettazione di fabbrica e come può essere implementato in Javascript. Finora quello che ho capito è che il modello di progettazione di fabbrica aiuta a creare un'istanza di classe più specifica che eredita da una classe astratta generale.

Quindi stavo leggendo questo articolo. Mi sono imbattuto in un secondo punto di svantaggi dei costruttori e della classe che afferma:

Details of instantiation get leaked into the calling API (via the 'new' [keyword] requirement):
All callers are tightly coupled to the constructor implementation. If you ever need the additional flexibility of the factory, the refactor is a breaking change. Class to factory refactors are common enough that they appear in the seminal Refactoring book, “Refactoring: Improving the Design of Existing Code” by Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts.

Che cosa significano i dettagli dell'istanziazione trapelati nell'API di chiamata?

    
posta Pravin 23.09.2017 - 17:15
fonte

1 risposta

1

I dettagli della creazione di istanze sono trapelati se non si utilizza una fabbrica.

Supponi di avere una classe Shape astratta, che ha una sottoclasse Circle e una Polygon , quest'ultima con sottoclasse Triangle e Square .

Se vuoi istanziare da qualche parte nel tuo codice alcuni oggetti Shape , il tuo codice dovrà conoscere non solo circa Shape , ma anche su ogni sottoclasse concreta che potrebbe essere istanziata, così come i parametri da usare per invocare il costruttore corrispondente.

Il codice di istanziazione specifico dipenderà quindi da molti dettagli (che sono trapelati). Esempio:

 int shapetype=random();  
 if (shapetype==0) 
      myshape = new Circle(random(), random()); 
 else if (shapetype==2)
      myshape = new Square(random());  
 ...
 myshape.draw();  

Se invece si utilizza una factory, la classe using dovrebbe solo conoscere la classe Shape astratta e come richiamare la factory. Non deve sapere nulla delle sottoclassi e dei parametri del costruttore, rendendo così il tuo codice meno dipendente dalle altre classi.

  myshape = shapefactory (random());
  myshape.draw(); 
    
risposta data 24.09.2017 - 00:58
fonte

Leggi altre domande sui tag