Pattern opposto del metodo Template

3

Abbiamo pattern, che è opposto al metodo Template?

Voglio dire, nella classe base definiamo le parti dell'algoritmo e il metodo astratto che implementa l'algoritmo. Quindi nella classe derivata, in quel metodo astratto, possiamo mescolare quelle parti come vogliamo.

    
posta Yurii N. 05.12.2018 - 19:33
fonte

3 risposte

2

Quello che descrivi è il polimorfismo di base:

class Receipee {
public: 
    void get_eggs(int n) { cout << "I take "<<n<<" eggs" <<endl; }
    void get_chocolate (int weight) { cout << "I take "<<weight<<" g chocolate" <<endl; }
    void get_milk(int l) { cout << "I take "<<l<<" cl of milk" <<endl; }
    void mix_it(int force) { cout << "I mix everything force "<<force<<endl; }
    virtual void prepare() = 0; 
};

class Receipee1 : public Receipee {
public: 
    void prepare() override { 
         get_milk(100);  
         get_eggs(2); 
         cout << "I do some mystery trick"<<endl; 
         mix_it(3); 
         cout << "Et voilà !" <<endl; 
    } 
};

Non c'è bisogno di schemi per questo ;-)

    
risposta data 05.12.2018 - 20:18
fonte
1

È lo schema della strategia. Nel modello di strategia, il metodo principale della base (che implementa l'algoritmo) è astratto: l'algoritmo deve essere implementato dai sottotitoli. Mentre in modello metodo modello, questo metodo principale è concreto / dettato mentre solo le parti del pezzo sono astratte.

Questi pattern sono sia l'applicazione premurosa della gerarchia delle classi che l'override. Tuttavia, per essere sicuri, sono possibili molte varianti per soddisfare le diverse esigenze. Quindi, possiamo avere metodi astratti e concreti definiti nella base da utilizzare a seconda delle necessità (come aiutanti e / o di rete). Quando il principale un algoritmo è concreto nella base, lo chiamiamo modello, e quando astratto lo chiamiamo strategia. A volte li mescoliamo entrambi, ovvero un principale concreto ma sovrascrivibile nella base.

    
risposta data 05.12.2018 - 20:03
fonte
0

Da quanto ho capito, il Metodo Template è un TIPO di Pattern Strategico. La differenza è che entrambi forniscono soluzioni a un problema di algoritmo "plug and play".

Sebbene esista una regola generale in generale, dovremmo favorire Composizione sull'ereditarietà . Le persone molto più intelligenti di me hanno sottolineato che, a lungo termine, l'eredità può fornire più sfide che soluzioni. Quindi, piuttosto che, utilizzando il codice, dovresti scegliere di iniettare l'algoritmo (o le strategie) in base alle tue esigenze. In breve, dovresti utilizzare il modello di strategia se stai cercando di mantenere le cose disaccoppiate e flessibili e di iniettare i comportamenti in base ai tuoi Use Case.

    
risposta data 18.12.2018 - 18:33
fonte

Leggi altre domande sui tag