Основное отличие между разработчиком и фабрикой, по моему скромному мнению, то, что разработчик полезен, когда необходимо сделать много вещей создать объект. Например, вообразите DOM. Необходимо создать много узлов и атрибутов для получения конечного объекта. Фабрика используется, когда фабрика может легко создать весь объект в одном вызове метода.
Одним примером использования разработчика является здание XML-документ, я использовал эту модель при создании фрагментов HTML, например, у меня мог бы быть Разработчик для создания определенного типа таблицы, и это могло бы иметь следующие методы (параметры не показывают) :
BuildOrderHeaderRow()
BuildLineItemSubHeaderRow()
BuildOrderRow()
BuildLineItemSubRow()
Этот разработчик тогда выложил бы HTML для меня. Это намного легче считать, чем обход через большой процедурный метод.
Выезд Шаблон Разработчика на Википедию .
#! называется " shebang " и представляет собой способ выполнения сценариев в Unix. Когда вы попросите ОС запустить файл, она выяснит, что это не обычный EXE-файл, и #! на старте служит волшебным маркером, который инструктирует ОС выполнить команду после #! и подключаем эту команду так, чтобы этот файл стал аргументом этой команды
, если myfile.py содержит
#!/usr/bin/python
, выполнение этого файла не сильно отличается от выполнения
$ /usr/bin/python myfile.py
Мои знания Haskell недостаточны. Но для вашего конкретного случая кажется, что команда runghc просто читает первую строку, анализирует все аргументы, указанные в этом #! строка, записывает остальную часть файла во временный файл и запускает ghc для этого временного файла (из которого будет удалена первая задержка - см. runghc.hs в источниках ghc для получения дополнительной информации).
Если вы хотите сделать то же самое с javac, вы можете использовать тот же подход, что и runghc. Напишите оболочку, которая съедает первую строку файла, записывает остальную часть файла во временный файл и запускает javac для этого файла.
Причина, по которой это работает, заключается в том, что Python, Perl и, по-видимому, Haskell - все это интерпретируемые языки. Это стандартный способ Unix назначить интерпретатор, который будет запускать сценарий. Java - это компилируемый язык, и его нельзя запускать с интерпретатором.
Если ваш файл - hello.hs, а первая строка - "#! / Usr / bin / runghc", то оболочка выполнит:
/usr/bin/runghc hello.hs
Эта первая строка в основном сообщает оболочке что использовать для запуска сценария.
Что касается примера java, первая строка должна быть исполняемым файлом, который запускает сценарий, а не то, что компилирует сценарий.
Shebang работает только с интерпретируемыми языками .... обычно это ничего не значит для компилятора, который в большинстве случаев выдает ошибку
Javac - это компилятор, а не интерпретатор.
В нем отсутствует интерактивный режим, который, как я считаю, является причиной «магии». То же самое не будет работать с GCC, поскольку в нем отсутствует такая же функция.
dmd (компилятор D), например, является примером компилятора, который поддерживает интерпертацию, имеет такой вид интерактивного редактирования (#! / Usr / bin / dmd -run).
Это расположение исполняемого файла на вашем компьютере для интерпретации вашего сценария. Java - это компилируемый язык, поэтому в таком утверждении нет необходимости.
Более того, дело в том, что это специальный комментарий, конструкция в Java не будет законной в этом смысле, поскольку # не является допустимым маркером комментария. Если такая конструкция имеет смысл ... чего нет ... она будет выглядеть так:
//! / Usr / local / jdk1.6.0_13 / bin / javac
Нашел эту ссылку на строку shebang через Википедию , но эта кажется лучшей статьей . См. Также Символ '#!' magic - подробности о механизме shebang в различных версиях Unix .