Несколько проблем с экземплярами в том, что метод Equals не обеспечивает true, даже если они содержат одинаковые значения. Таким образом, попытка переопределить метод Equals обеспечивает намного более медленное, чем ссылочное равенство.
Пока я думал о производительности, я думал, что глупо создавать 2 экземпляра, которые являются одним и тем же, но не тем же адресом памяти. Если я смогу избежать создания одинаковых экземпляров с разными ссылками, это повысит производительность и поможет сравнить ссылки легче, чем писать собственные методы Equal.
Например:
У меня есть класс координат, в котором хранятся координаты шахматной доски. Так что мне нужен только массив Coordinate[8,8]
для представления всех кординатов доски. Вместо создания экземпляров я могу создать все экземпляры, после чего мой фабричный метод может их вернуть.
Cooardinate.Get(2,3)
вместо new Coordinate(2,3)
Первый - это статический метод статического класса, который возвращает предопределенную координату в заданных значениях.
Еще одним преимуществом является то, что мы не будем тратить время на создание и сбор мусорных объектов в памяти. Все они уже определены заранее. Также мы можем предоставить уникальный GetHashCode для экземпляров простым и быстрым способом, например 0 для [0,0], 1 для [0,1] ....
Разве не стоит попробовать? эта идея сделает кодирование сложнее написать или понять? Есть ли такой шаблон?
Ну, вкратце, в чем недостатки этого пути?