Применяется ли статическая фабрика к C #?

#java #c# #.net-core #factory #.net-core-2.0

#java #c# #.net-ядро #фабрика #.net-core-2.0

Вопрос:

Я читаю о методе статической фабрики. Применяется ли метод статического фабричного метода только к Java или он может быть применен к C #.Net также? Кажется, это больше похоже на Java.

https://dzone.com/articles/constructors-or-static-factory-methods

 class Color {
    private final int hex;
    static Color makeFromRGB(String rgb) {
        return new Color(Integer.parseInt(rgb, 16));
    }
    static Color makeFromPalette(int red, int green, int blue) {
        return new Color(red << 16   green << 8   blue);
    }
    static Color makeFromHex(int h) {
        return new Color(h);
    }
    private Color(int h) {
        return new Color(h);
    }
}
 

Ответ №1:

Да, это определенно можно применить в C #, и часто это хорошая идея, особенно если вы хотите что-то сконструировать различными способами, используя одни и те же типы параметров.

В качестве примера посмотрите на TimeSpan . У этого есть фабричные методы FromSeconds , FromMinutes , FromHours , FromDays все из которых принимают один double в качестве типа параметра.

Шаблон фабричного метода также допускает кэширование в некоторых ситуациях.

Комментарии:

1. спасибо, по какой-то причине все примеры, которые я читал в Интернете, применимы к Java, впервые я услышал об этом, когда начал изучать Java и читать «Эффективную Java» от Джошуа Блоха, я прочитал много книг по C # и никогда не слышал до сих пор

Ответ №2:

Static Factory является вариацией шаблона проектирования фабричного метода и может использоваться на разных языках, а не только на Java и C #.

Они уже существуют в C # в TimeSpan классе, где вы можете выполнить следующее:

 var seconds = TimeSpan.FromSeconds(5);
var minutes = TimeSpan.FromSeconds(25);