JavaRush /Java Blog /Random-TW /什麼是介面程式設計?來玩建築師吧

什麼是介面程式設計?來玩建築師吧

在 Random-TW 群組發布
也許你曾經聽過「介面程式設計」這樣的東西。是時候更好地了解這一點了。將會有很少的文字和大量的程式碼(沒有邏輯)。 我找不到第一個介面何時出現。這可能是很久以前的事了,網路已經忘記了這件事。反正。介面的想法很簡單:描述我們將要做什麼,而不需要深入細節。那些。你怎麼做並不重要,重要的是你做什麼。但在我寫完這篇文章後,我在小組中找到了一篇關於類似主題的好文章。點擊連結閱讀,越多越好! 內容:

為什麼這是必要的?

當程式碼由一個類別組成時,這並不是真正必要的。但是,當類別必須相互交互,並且類別的數量超過幾十個時,就需要考慮設計了。首先,從上到下(從最大抽像到實現)思考專案的整個結構。如果幾個人在做一個項目,那麼非常方便的做法是達成一致,描述類別的交互接口,然後拆解這些接口並開始實現它們。結果是任務具有良好的並行性;它們很容易劃分,因為 每個人都同意一切,但沒有人在乎細節。

這為開發商帶來了什麼?

開發人員不需要該類別的實作。這就是說,大家都同意之後,他就拿他需要的介面來使用。該實作將在準備就緒後被替換。讓我向您展示我的範例,然後我們將進一步討論。我決定寫一個小型收銀機專案。她會幫助選票、賣票、向銀行取錢或從銀行領錢、為大量前來的人兌換錢。所以,我的建築感嘆: PS,不需要複製和創建結構,為了懶惰,​​我在文章末尾附上了帶有代碼的存檔;)結構
什麼是介面程式設計? 讓我們來扮演建築師 - 1
一堆模型:
package cashbox.model;

public enum Currency {
    USD,
    EUR,
    RUR
}
package cashbox.model;

public interface Direction {
    /**
     * @return город How цель направления, куда едем/летим/двигаемся
     */
    String getCity();
}
package cashbox.model;

/**
 * модель денег
 */
public interface Money {
    /**
     * @return тип валюты
     */
    Currency getCurrency();

    /**
     * @return сумма денег
     */
    long getAmount();
}
package cashbox.model;

public interface Ticket {
    /**
     * @return направление куда двигаемся
     */
    Direction getDirection();

    /**
     * @return цена билета
     */
    Money getPrice();

    /**
     * @return транспорт на котором передвигаемся
     */
    Transport getTransport();
}
package cashbox.model;

public interface Transport {
}
異常對:
package cashbox.exception;

public class NoSoMuchMoneyException extends RuntimeException {
}
package cashbox.exception;

import cashbox.model.Money;

public class NoSuchCurrencyException extends RuntimeException {
    private Money money;

    public NoSuchCurrencyException(Money money) {
        this.money = money;
    }

    public NoSuchCurrencyException(String message, Money money) {
        super(message);
        this.money = money;
    }

    public Money getMoney() {
        return money;
    }
}
收銀機是最重要的部分:
package cashbox;

import cashbox.exception.NoSoMuchMoneyException;
import cashbox.exception.NoSuchCurrencyException;
import cashbox.model.*;
import javafx.util.Pair;

import java.util.List;
import java.util.Map;

public interface CashBox {

    /**
     * @param direction направление билета
     * @return Стоимость проезда по видам транспорта
     */
    Map<Transport, Money> getPrice(Direction direction);

    /**
     * Продать билет
     * @param money деньги за билет
     * @return пару из билета и сдачи
     */
    Pair<Ticket, Money> sellTicket(Money money);

    /**
     * обмен валюты
     * @param moneyFrom валюта, которую передает клиент
     * @param currency валюта, которую клиент хочет получить, тут будет учитываться только тип валюты,
     *                 количество будет проигнорировано
     * @return Требуемая валюта
     * @throws NoSoMuchMoneyException если недостаточно денег в кассе для обмена
     * @throws NoSuchCurrencyException если нет такой валюты, отсутствующая валюта передается How атрибут
     */
    Money change(Money moneyFrom, Currency currency) throws NoSoMuchMoneyException, NoSuchCurrencyException;

    /**
     * Инкасация - отправить деньги в банк
     * @param money - сумма и валюта, можно передать несколько
     */
    void sendToBank(Money... money);

    /**
     * Запрос денег из банка
     * @param money - сумма и валюта необходимая кассе
     */
    void requestFromBank(Money... money);

    /**
     * Подбор билета.
     * В метод передается либо одно, либо другое, либо вместе.
     * Если оба атрибута null значит вызов некорректный
     * @param transport - желаемый транспорт
     * @param direction - желаемое направление
     * @return список подходящих билетов
     */
    List<Ticket> chooseBy(Transport transport, Direction direction);
}
毫無準備的開發人員首先註意到的是javadoc。儘管未經培訓的開發人員可能對它們很熟悉。有些人有時很懶,但我的程式碼已經很好了,沒有文件;)即使現在我也不想寫一些關於某些事情的文檔。那麼,為什麼要寫transport說它是transport呢?讓我們稍後再說吧!我試圖在文件中描述所需的一切。現在我將解釋為什麼這樣編寫程式碼會更方便。你看,現在我可以給你一個介面CashBox並要求你實現它。他不難嗎?另外,文檔中描述了所需的行為。您不必等待有人編寫模型或其他任何東西。您採用介面模型並開始基於它們進行工作。現在您正在使用介面進行編程,恭喜。現在是主要的事情。我可以把要實現的任務交給你CashBox,也可以交給其他人,這樣我們就有了 2 個實現。例如,郊區和國際售票處。您將能夠並行編寫程式碼,並且任何將基於該介面編寫程式碼的團隊成員都CashBox可以在該介面上啟動和建置。非常舒服。多工處理,見鬼去吧。連結到 Google 雲端硬碟上的程式碼 ->這裡
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION