Хотя Apple заявляет , что эти методы являются фабричными, я утверждаю, что они не совпадают с шаблоном фабричного метода в Шаблоны проектирования . В шаблоне DP Factory Method используется абстрактный класс Creator
с конкретными подклассами, которые генерируют конкретные Product
классы. Методы, которые вы описываете (которые часто называют «удобными конструкторами»), почти никогда не реализуются таким образом. Apple определяет метод фабрики как «метод класса, который для удобства клиентов создает экземпляр класса. Метод фабрики объединяет выделение и инициализацию за один шаг и возвращает автоматически выпущенный экземпляр класса». Вот почему я считаю, что термин «конструктор удобства» является более подходящим и менее запутанным, чем «фабричный метод».
NSString
- это кластер класса , который имеет некоторые сходные черты с шаблоном Factory Method, в котором вы можете получать разные конкретные классы из одного и того же вызова метода. Но кластеры классов отличаются от Factory Method тем, что суперкласс знает обо всех подклассах, и именно с суперклассом взаимодействуют вызывающие. В шаблоне Factory Method вызывающие абоненты взаимодействуют с подклассами класса Creator.
Итак, к вашему вопросу: вы должны создавать удобные методы, когда это удобно для вызывающей стороны. Дополняет:
Foo *foo = [[[Foo alloc] initWithSomething:something] autorelease];
с
Foo *foo = [Foo fooWithSomething:something];
По моему опыту, в 90% случаев вам этого не следует. Это не стоит дополнительного кода. Вам следует подождать, пока вы не увидите, что initWithSomething:
называется лотом с autorelease
сразу после него, а затем вы добавляете вспомогательный конструктор, чтобы сделать вещи более удобными. Вещи как stringWith...
находятся в этом классе. Их много называют.