Создать корабль (нельзя если флот телепортируется сейчас)
refugee15
мне вышло 13.5$), там у меня еще Jabber, почта и мои парсеры крутятся. Но я не гонюсь за рекордными ценами, для мня важны также скорость, широкий канал, удобные условия оплаты (биткоин).
СreateNewShipRequest вынимает из клиентского запроса id (или имя) класса корабля и ищет его в специальной таблице (map), где ему сопоставлена ссылка класс, который можно инстанциировать (вызвать для него new). Все классы кораблей реализуют интерфейс Ship, поэтому для СreateNewShipRequest любой корабль выглядит как просто Ship (в реальности же конструкторы у всех разные). Если при вызове конструктора он не нашел соответствующую технологию, то из него выбрасывается исключение, которое пролетает насквозь все уровни, пока не ловится на самом верху и отправляется клиенту в виде строки. Таблицу, в которой именам/id кораблей соответствуют внутренние классы, можно сделать статической и добавлять туда новые корабли вручную, а можно пойти еще дальше и сделать еще более гибкую архитектуру, чтобы при загрузке модулей, каждый класс кораблей сам прописывал себя в таблицу (изначально пустую), тогда новые корабли можно будет добавлять в новых модулях, не меняя ни одной строчки в существующей кодовой базе.