Чистый код. Создание, анализ и рефакторинг — страница 75 из 94

914

915     /**

916      * Возвращает true, если текущий объект SerialDate представляет ту же дату,

917      * что и заданный объект SerialDate.

918      *

919      * @param other  дата для сравнения.

920      *

921      * @return true, если текущий объект SerialDate представляет

922      *         ту же дату, что и заданный объект SerialDate.

923      */

924     public abstract boolean isOn(SerialDate other);

925

926     /**

927      * Возвращает true, если текущий объект SerialDate представляет более раннюю

928      * дату по сравнению с заданным объектом SerialDate.

929      *

930      * @param other  дата для сравнения.

931      *

932      * @return true, если текущий объект SerialDate представляет

933      *         более раннюю дату по сравнению с заданным объектом SerialDate.

934      */

935     public abstract boolean isBefore(SerialDate other);

936

937     /**

938      * Возвращает true, если текущий объект SerialDate представляет ту же

939      * дату, что и заданный объект SerialDate.

940      *

941      * @param other  дата для сравнения.

942      *

943      * @return true, если текущий объект SerialDate представляет

944      *          ту же дату, что и заданный объект SerialDate.

945      */

946     public abstract boolean isOnOrBefore(SerialDate other);

947

948     /**

949      * Возвращает true, если текущий объект SerialDate представляет ту же

950      * дату, что и заданный объект SerialDate.

951      *

952      * @param other  дата для сравнения.

953      *

954      * @return true, если текущий объект SerialDate представляет

955      *         ту же дату, что и заданный объект SerialDate.

956      */

957     public abstract boolean isAfter(SerialDate other);

958

959     /**

960      * Возвращает true, если текущий объект SerialDate представляет ту же

961      * дату, что и заданный объект SerialDate.

962      *

963      * @param other  дата для сравнения.

964      *

965      * @return true, если текущий объект SerialDate представляет

966      *         ту же дату, что и заданный объект SerialDate.

967      */

968     public abstract boolean isOnOrAfter(SerialDate other);

969

970     /**

971      * Возвращает true, если текущий {@link SerialDate} принадлежит

972      * заданному диапазону (режим INCLUSIVE).  Порядок дат d1 и d2

973      * не важен.

974      *

975      * @param d1  граничная дата диапазона.

976      * @param d2  другая граничная дата диапазона.

977      *

978      * @return Логический признак.

979      */

980     public abstract boolean isInRange(SerialDate d1, SerialDate d2);

981

982     /**

983      * Возвращает true если текущий {@link SerialDate} принадлежит

984      * заданному диапазону (включение границ указывается при вызове). Порядок

985      * дат d1 и d2 не важен.

986      *

987      * @param d1  граничная дата диапазона.

988      * @param d2  другая граничная дата диапазона.


Листинг Б.1 (продолжение)

989      * @param include  код, управляющий включением начальной и конечной дат

990      *                 в диапазон.

991      *

992      * @return Логический признак.

993      */

994     public abstract boolean isInRange(SerialDate d1, SerialDate d2,

995                                       int include);

996

997     /**

998      * Возвращает последнюю дату, приходящуюся на заданный день недели,

999      * ПРЕДШЕСТВУЮЩУЮ текущей дате.

1000      *

1001      * @param targetDOW  код дня недели.

1002      *

1003      * @return последняя дата, приходящаяся на заданный день недели,

1004      *         ПРЕДШЕСТВУЮЩАЯ текущей дате.

1005      */

1006     public SerialDate getPreviousDayOfWeek(final int targetDOW) {

1007         return getPreviousDayOfWeek(targetDOW, this);

1008     }

1009

1010     /**

1011      * Возвращает самую раннюю дату, приходящуюся на заданный день недели,

1012      * ПОСЛЕ текущей даты.

1013      *

1014      * @param targetDOW  код дня недели.

1015      *

1016      * @return самая ранняя дата, приходящаяся на заданный день недели

1017      *         ПОСЛЕ текущей даты.

1018      */

1019     public SerialDate getFollowingDayOfWeek(final int targetDOW) {

1020         return getFollowingDayOfWeek(targetDOW, this);

1021     }

1022

1023     /**

1024      * Возвращает ближайшую дату, приходящуюся на заданный день недели,

1025      *

1026      * @param targetDOW  код дня недели.

1027      *

1028      * @return ближайшая дата, приходящаяся на заданный день недели,

1029      */

1030     public SerialDate getNearestDayOfWeek(final int targetDOW) {

1031         return getNearestDayOfWeek(targetDOW, this);

1032     }

1033

1034 }


Листинг Б.2. SerialDateTest.java

   1 /* ========================================================================