Qual è il nome di questo modello di "metodo differito" polimorfico? [chiuso]

1

Over su StackOverflow mi sono trovato a consigliare il seguente schema. Vedo ha usato abbastanza spesso in produzione ma non ricordo di aver visto articoli o post di blog che ne discutano l'uso.

L'essenza è che fornisci un metodo di implementazione sovrascrivibile che non fa parte dell'API pubblica. Il metodo rivolto al pubblico non può essere ignorato e può fare alcune convalide, asserzioni ecc. Prima (o dopo) chiamando la funzione di implementazione effettiva. Forse in determinate condizioni deciderà di non chiamarlo affatto.

È difficile descrivere a parole, quindi spero che il seguente frammento di codice debba essere compreso da chi non ha esperienza Java. Il concetto dovrebbe essere applicabile a qualsiasi linguaggio polimorfico.

abstract class Animal        //may be abstract or concrete
{
    final public void eat()
    {
        if (isHungry)
        {
            eatImpl();
        }
    }

    abstract protected void eatImpl();
}

class Dog extends Animal
{
     @Override
     protected void eatImpl()
     {
         // Nom nom nom
     }
}

In questo caso, non vogliamo che Animal s mangi se non hanno fame: forzare un cane a mangiare quando non aveva fame non sarebbe molto bello.

Questo modello ha un nome? Come si chiama?

L'ho sempre definito come "metodi differiti" che non penso sia molto descrittivo. Mentre scrivevo questa domanda, ho trovato " AOP for Dummies ".

Non mi piace la convenzione di denominazione xxxImpl() ma sembra la più utilizzata in questo tipo di situazione.

    
posta Michael 04.04.2017 - 16:54
fonte

1 risposta

5

Questo è il modello di progettazione del metodo del modello. Da Wikipedia:

In software engineering, the template method pattern is a behavioral design pattern that defines the program skeleton of an algorithm in an operation, deferring some steps to subclasses.[1] It lets one redefine certain steps of an algorithm without changing the algorithm's structure.[2]

link

Per quanto riguarda la convenzione di denominazione xxxImpl() , sono d'accordo. Denominare qualsiasi implementazione "impl" è una bandiera rossa nella mia mente in quanto suggerisce un'astrazione che può solo avere un'implementazione, che nella mia mente è molto spesso eccessiva.

    
risposta data 04.04.2017 - 17:05
fonte

Leggi altre domande sui tag