Создайте API с каскадными вызовами функций (Class.doThis( "..." ). DoThat ( "..." ).....)

Я видел, что некоторые API разработаны таким образом, что вы должны использовать их, как показано ниже.

Class.doThis("...").doThat("...").....

Например, HTTPCommon (Fluent API) может использоваться как:

Request.Get("http://somehost/")
        .connectTimeout(1000)
        .socketTimeout(1000)
        .execute().returnContent().asString();

Расписание кварца можно использовать как:

JobDetail job = newJob(HelloJob.class)
               .withIdentity("job1", "group1")
               .build();

SimpleCatptch может использоваться как:

Captcha captcha = new Captcha.Builder(200, 50)
                  .addText()
                  .addBackground()
                  .addNoise()
                  .gimp()
                  .addBorder()

Как называется дизайн такого API? Когда хорошо спроектировать это?

Ответ 1

Он просто называется "бегло", как отметил HTTPCommon. Общим для строителей является наличие плавного макета, но шаблон построителя ортогонален: Fluent APIs - это доступные читаемые вызовы методов, в то время как строители описывают полную конфигурацию объекта и затем строят его в полном состоянии все сразу.

Этот стиль подходит, когда он читает код; это особенно полезно, когда автозаполнение IDE может помочь программисту. Двумя наиболее распространенными вариантами использования являются конфигурации (либо сборщики, либо Spring -строчные конфигурации), и конвейеры данных (такие как потоки Java 8 и реактивное программирование).

Ответ 3

Это просто шаблон строителя. Из oodesign:

мотивация

Чем сложнее приложение, тем сложнее классы и используемые объекты увеличиваются. Сложные объекты изготовлены из деталей, изготовленных другие объекты, которые нуждаются в особой заботе при построении. Приложение может потребоваться механизм для построения сложных объектов, которые независимо от тех, которые составляют объект. Если это проблемы, с которой вы сталкиваетесь, вы можете попытаться использовать Builder (или Adaptive Builder).

Этот шаблон позволяет объекту клиента построить сложный объект посредством указав только его тип и содержание, защищенные от деталей связанные с представлением объекта. Таким образом, строительство процесс может использоваться для создания разных представлений. Логика этот процесс изолирован от фактических шагов, используемых при создании сложный объект, поэтому процесс можно снова использовать для создания другого объект формирует тот же набор простых объектов, что и первый.

В принципе, вы можете использовать его, если процесс сборки вашего объекта несколько сложный и хочет выставить декларативный способ его создания.