Adamos, Это конечно правильно, но для конкретно моей ситуации гораздо проще. Цена всех товаров у продавцов фиксированная и скидок нет, доставка тоже всегда по одной цене независимо от кол-ва товаров (на самом деле нет, но в 90% случаев это так, остальные можно откинуть руками).
Илья Николаевский, Да, если продавец не дает минимума ни по одному из товаров, купив у него все равно можно секономить на доставке. Условно доставка фиксированная 100 рублей. Он продает 2 товара по 110. Другие два продавца продают по одному товару по 100. Если закажем у других продавцов - получим 400 (200 за товары + 100 за доставку от каждого). Если закажем у него - 320.
Mors Clamor, Не совсем понимаю, что имеете ввиду. Вариант чего? Предлагаете рассчитывать граничные варианты - "заказываем и минимального колличества продавцов"/"заказываем по минимальным ценам игнорируя продавцов и доставку"?
Согласно опыту, книжки как раз хорошо идут. Видео-материалы я очень неохотно смотрю, т.к. они отнимают гораздо больше времени, сложно найти какой-то конкретный момент и т.д. В итоге накапливается дискомфорт и иду искать что-то более удобное.
Евгений: Ну, по сути, сейчас я нахожусь в процессе переписывания кода с первой костыльной реализации, в которой я абсолютно все возможные типы нод запихнул в один класс (там был список для хранения чего угодно и Enum для определения какой тип ноды), которая работала ну очень плохо. И да, я и использую посетителей. Класс Node - просто абстрактный и обязывает всех его потомков определять для себя метод accept(visitor). Но тем не менее, я не представляю как можно запихнуть в Compositor совершенно разные по логике работы ноды, допустим нода идентификатор и нода операция сложения. Первая просто хранит внутри себя строку и выдает ее по геттеру, вторая же вообще не имеет имени и хранит внутри себя две других ноды.
Евгений: Нуу, так красивее и структурированнее) И даже если использовать Object, вопрос остается вопросом - нам все равно рано или поздно надо приводить типы.
Евгений: Ну, если дополнить уже существующий пример с AssignNode конструтором, то
class AssignNode extends Node {
private VarNode left;
private ExpressionNode right;
public AssignNode (VarNode left, ExpressionNode right) {}
Нам же надо передать туда значения правильных типов, чтобы система проверки типов java была счастлива)
Ну а дальше - нам предстоит анализировать его и так далее. Сначала я пытался написать что-то похожее на паттерн Composite, но слишком разная логика у нод.
Евгений: Я примерно понял о чем вы, но у меня есть ноды с совершенно разным поведением.
Т.е. как я показывал выше, присваивание хранит правую и левую часть, а например, нода метода хранит имя метода + список операций в нем.
@vlastachu Вау. Последнее выглядит интересно) Посмотрим, то ли это, что мне нужно.
ЗЫ Программы по памяти не требовательны. Мне интересно провести сравнения использования памяти разными классами из стандартной библиотеки. Глядишь, и в песочницу результаты в виде статьи оформлю.
Да, взаимодействие ведется через один и тот же интерфейс так-то. Конкретно для сокета:
incoming = serverSocket.accept();
in = new Scanner(incoming.getInputStream());
out = new PrintWriter(incoming.getOutputStream(), true);
а потом просто
out.println(message);