/// <summary> /// Конструктор /// </summary> public AquariumObject(BaseParameters parameters) { X = parameters.X; Y = parameters.Y; SizeX = parameters.SizeX; SizeY = parameters.SizeY; }
public IAquariumObject Create(AquariumObjectType aquariumObjectType, BaseParameters parameter) { AquariumTypeDescription typeDescription = GetTypeDescription(aquariumObjectType); Type type = typeDescription.ObjectType; IAquariumObjectRenderer renderer = _rendererSelector.Get(aquariumObjectType, parameter); IAquariumObject aquariumObject = (IAquariumObject)Activator.CreateInstance(type, parameter, renderer); IAquariumObject wrappedAquariumObject = _aquariumObjectWrapper.Wrap(aquariumObject); return wrappedAquariumObject; }
/// <summary> /// Создать рендерер /// </summary> /// <param name="aquariumObjectType"></param> /// <param name="parameters"></param> /// <returns></returns> private ImageRenderer CreateRenderer(AquariumObjectType aquariumObjectType, BaseParameters parameters) { ImageRenderer renderer = null; Image image = GetImage(aquariumObjectType, parameters); if (image != null) { renderer = new ImageRenderer(image); } return renderer; }
/// <summary> /// Получить рендерер /// </summary> public virtual IAquariumObjectRenderer Get(AquariumObjectType aquariumObjectType, BaseParameters parameters) { string key = GetKey(aquariumObjectType, parameters); ImageRenderer renderer; if (!_renderers.TryGetValue(key, out renderer)) { renderer = CreateRenderer(aquariumObjectType, parameters); _renderers.Add(key, renderer); } return renderer; }
/// <summary> /// Получить изображение рыбки /// </summary> private Image GetFishImage(AquariumObjectType aquariumObjectType, BaseParameters parameters) { FishParameters fishParameters = parameters as FishParameters; if (fishParameters != null) { Type movementStategyType = fishParameters.MovementStrategy.GetType(); if (movementStategyType == typeof(SinMovementStrategyAdapter)) { return Resources.FishRed; } } return Resources.Fish; }
/// <summary> /// Получить изображение объекта /// </summary> private Image GetImage(AquariumObjectType aquariumObjectType, BaseParameters parameters) { Image image = null; switch (aquariumObjectType) { case AquariumObjectType.Fish: image = GetFishImage(aquariumObjectType, parameters); break; case AquariumObjectType.Seaweed: image = Resources.Seaweed; break; } return image; }
/// <summary> /// Получить ключ рендерера /// </summary> private string GetKey(AquariumObjectType aquariumObjectType, BaseParameters parameters) { string key = ((int)aquariumObjectType).ToString(); // Здесь получаются слишком большие строки FishParameters fishParameters = parameters as FishParameters; if (fishParameters != null && fishParameters.MovementStrategy != null) { Type movementStrategyType = fishParameters.MovementStrategy.GetType(); key += movementStrategyType.GUID; } return key; }