Domanda

ho capito il concetto di "modello di strategia", ma io sono ancora un po 'confuso.

Let'say abbiamo una classe denominata Dog. Dog ha MovementBehaviour (interfaccia) che può essere MovementBehaviourNormal e MovementBehaviourFast. MovementBehaviourNormal e MovementBehaviourFast entrambi contengono un metodo denominato move.

Domanda: qual è il modo migliore per accedere agli attributi di cane dal metodo move? E 'una cattiva idea di passare l'oggetto cane a MovementBehaviour come delegato?

È stato utile?

Soluzione

In generale, non si dovrebbe essere su come accedere alle proprietà Dog direttamente dal vostro oggetto strategia. Invece, ciò che si può fare è di fornire un metodo mossa che restituisce una nuova posizione in base alla vecchia posizione. Così, per esempio, se si dispone di:

@interface Dog : NSObject {
    NSInteger position;
    DogStrategy * strategy;
}
@property(nonatomic, assign) NSInteger position;
@property(nonatomic, retain) DogStrategy * strategy;
- (void)updatePosition;
@end

@implementation Dog
@synthesize position, strategy;

- (void)updatePosition {
    self.position = [self.strategy getNewPositionFromPosition:self.position];
}
@end
@interface DogStrategy : NSObject { }
- (NSInteger)getNewPositionFromPosition:(NSInteger)pos;
@end

// some parts elided for brevity

@interface NormalDogStrategy : DogStrategy { }
@end

@implementation NormalDogStrategy
- (NSInteger)getNewPositionFromPosition:(NSInteger)pos {
    return pos + 2;
}
@end

Poi, quando si crea un'istanza di un cane, è possibile assegnare il NormalDogStrategy e call [dog updatePosition] - the Dog chiederà la sua strategia per la sua posizione aggiornata, e assegnare che alla sua istanza variabile stessa. Hai evitato di esporre i meccanismi interni di Dog al tuo DogStrategy ed ancora realizzato quello che intendeva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top