classDiagram class Entity { <> +IMovementStrategy MovementStrategy +IFeedingStrategy FeedingStrategy +Move() +Feed() } class Morg { } class IMovementStrategy { <> +Move(entity: Entity, newLocation: (int, int)) } class IFeedingStrategy { <> +Feed(predator: Entity, prey: Entity) } class MovementStrategyPaddles { +Move(...) } class MovementStrategyOozes { +Move(...) } class FeedingStrategyAbsorbs { +Feed(...) } class FeedingStrategyEnvelops { +Feed(...) } class MorgFactory { +CreateMovementStrategy(...) IMovementStrategy +CreateFeedingStrategy(...) IFeedingStrategy } Entity <|-- Morg Entity --> IMovementStrategy : uses Entity --> IFeedingStrategy : uses IMovementStrategy <|.. MovementStrategyPaddles IMovementStrategy <|.. MovementStrategyOozes IFeedingStrategy <|.. FeedingStrategyAbsorbs IFeedingStrategy <|.. FeedingStrategyEnvelops MorgFactory ..> IMovementStrategy : creates MorgFactory ..> IFeedingStrategy : creates note for Entity "Any combination of movement and feeding behaviors configured via Factory"