Ecco il mio codice iniziale che vorrei modificare utilizzando il modello di progettazione della strategia.
class Bar
{
int a;
int b;
...
}
Class Foo
{
Bar *bar;
bool action1(){
// this function does a lot of work that only uses "bar.a"
}
bool action2(){
// this function does also a lot of work that only uses "bar.a"
}
void command(){
...
Bar bar2 = new Bar();
bar = bar2; // this function modifies the attribute bar.
...
}
...
}
Sto provando a separare il codice di action1 e action2 dalla classe Foo creando un oggetto strategia che implementerà tali azioni. Non so quale di queste implementazioni sia migliore.
Prima soluzione:
class ActionStrategy {
Bar *bar;
bool action1();
bool action2();
}
Class Foo
{
Bar *bar;
ActionStrategy strategy
bool action1(){
strategy.action1();
}
bool action2(){
strategy.action2();
}
void command(){
...
Bar bar2 = new Bar();
bar = bar2; // this function modifies the attribute bar.
...
}
...
}
Seconda soluzione:
class ActionStrategy {
int a;
bool action1();
bool action2();
}
Class Foo
{
Bar *bar;
ActionStrategy strategy
bool action1(){
strategy.action1();
}
bool action2(){
strategy.action2();
}
void command(){
...
Bar bar2 = new Bar();
setBar(bar2); // this function modifies the attribute bar.
...
}
void setBar(Bar* target) {
bar = target;
strategy.a = target->a;
}
...
}