Обычное использование Фабрики - это создание объекта, когда вы не знаете, какой тип вам нужен заранее. Фабрика определяет, какой конструктор вызывать в зависимости от ситуации.
В качестве примера предположим, что вы хотите создать класс для загрузки файлов, но заранее не знаете, как можно получить файл. Может быть, это FTP, HTTP, SVN или что-то еще. У вас есть класс Downloader, который берет URL любого типа и дает вам объект:
my $object = Downloader->new( $some_url );
Вы не знаете тип этого объекта, но вам все равно. Все создаваемые им объекты знают, как реагировать на store_in_directory
, поэтому вы вызываете метод, не зная тип конкретного объекта:
$object->store_in_directory( $dir );
И вот, пожалуйста. Фабрика new
позволяет подклассам (или что-то еще) создавать $object
. Это упрощает интерфейс, потому что на уровне приложения вам не нужно выбирать правильный класс.
Одна из приятных особенностей Perl заключается в том, что вам не нужно жестко кодировать имена классов. Вы можете сделать что-то вроде этого, где вы используете строку, определенную во время выполнения, для создания объекта:
sub new {
my( $class, @args ) = @_;
my $output_class = $class->choose_the_right_implementing_class;
my $output_object = $output_class->new;
}