using System.Collections.Generic;
private readonly PointIcon icon;
public Point(int x, int y, PointIcon icon)
Console.WriteLine($"{icon.PointType} at {x} {y}");
public PointType PointType { get; init; }
public byte[] icon { get; init; }
public PointIcon(PointType pointType, byte[] icon)
public class PointIconFactory
Dictionary<PointType, PointIcon> icons = new Dictionary<PointType, PointIcon>();
public PointIcon GetPointIcon(PointType pointType)
if(!icons.ContainsKey(pointType))
icons.Add(pointType, new PointIcon(pointType, null));
public class PointService
private readonly PointIconFactory pointIconFactory;
public PointService(PointIconFactory pointIconFactory)
this.pointIconFactory = pointIconFactory;
public List<Point> GetPoints()
List<Point> points = new List<Point>();
points.Add(new Point(1, 2, pointIconFactory.GetPointIcon(PointType.CAFE)));
public static void Main()
var pointService = new PointService(new PointIconFactory());
foreach (var point in pointService.GetPoints())