JavaRush /Java 博客 /Random-ZH /什么是接口编程?来玩建筑师吧

什么是接口编程?来玩建筑师吧

已在 Random-ZH 群组中发布
也许你曾经听说过“接口编程”这样的东西。是时候更好地了解这一点了。将会有很少的文本和大量的代码(没有逻辑)。 我找不到第一个界面何时出现。这可能是很久以前的事了,互联网已经忘记了这件事。反正。界面的想法很简单:描述我们将要做什么,而不需要深入细节。那些。你怎么做并不重要,重要的是你做什么。但在我写完这篇文章后,我在小组中找到了一篇关于类似主题的好文章。点击链接阅读,越多越好! 内容:

为什么这是必要的?

当代码由一个类组成时,这并不是真正必要的。但是,当类必须相互交互,并且类的数量超过几十个时,就需要考虑设计了。首先,从上到下(从最大抽象到实现)思考项目的整个结构。如果几个人在做一个项目,那么非常方便的做法是达成一致,描述类的交互接口,然后拆解这些接口并开始实现它们。结果是任务具有良好的并行性;它们很容易划分,因为 每个人都同意一切,但没有人关心细节。

这给开发商带来了什么?

开发人员不需要该类的实现。这就是说,大家都同意之后,他就拿他需要的接口来使用。该实现将在准备就绪后被替换。让我向您展示我的示例,然后我们将进一步讨论。我决定写一个小型收银机项目。她会帮助选票、卖票、向银行取钱或从银行取钱、为大量前来的人兑换钱。所以,我的建筑感叹: 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