ООП для чайников. Паттерны проектирования. Паттерн фабричный метод (Factory method).

Еще один паттерн из группы порождающих – фабричный метод (factory method). Этот паттерн позволяет скрывать от клиента логику создания запрашиваемого объекта.
Этот паттерн следует применять когда заранее неизвестно объекты каких классов должны быть созданы, поскольку предполагается множество различных вариантов работы, либо объекты, которые класс создает должны быть определены уже в подклассе.

Пример применения паттерна на UML диаграмме:

А вот, пример применения паттерна в коде, – класс создающий разные типы документов, из одинаковых составных частей:

// IChapter.java
package patterns.factorymethod.report;

public interface IChapter {

	public String getType();

}

// IReport.java
package patterns.factorymethod.report;

public interface IReport {

	public void render();
	public void addChapter(IChapter chapter);	

}

// CustomReport.java
package patterns.factorymethod.report;

import java.util.ArrayList;
import java.util.Iterator;

public class CustomReport implements IReport {	

	protected ArrayList<IChapter> chapters = new ArrayList<IChapter>();	

	@Override
	public void render() {
		for (Iterator<IChapter> iter = chapters.iterator(); iter.hasNext();  ) {
			System.out.println(((IChapter)iter.next()).getType());
		}
	}

	@Override
	public void addChapter(IChapter chapter) {
		chapters.add(chapter);
	}

}

// ExtendedChapter.java
package patterns.factorymethod.report;

public class ExtendedChapter implements IChapter {

	@Override
	public String getType() {
		return "Extended";
	}

}

//  IndexChapter.java
package patterns.factorymethod.report;

public class IndexChapter implements IChapter {

	@Override
	public String getType() {
		return "Index";
	}

}

// SmallChapter.java
package patterns.factorymethod.report;

public class SmallChapter implements IChapter {

	@Override
	public String getType() {
		return "Small";
	}

}

// TitleChapter.java
package patterns.factorymethod.report;

public class TitleChapter implements IChapter {

	@Override
	public String getType() {
		return "Title";
	}

}

// ReportCreator.java
package patterns.factorymethod.report;

public class ReportCreator {

	public IReport createSummaryReport() {
		CustomReport report = new CustomReport();
		report.addChapter(new TitleChapter());
		report.addChapter(new SmallChapter());
		return report;
	}

	public IReport createFullReport() {
		CustomReport report = new CustomReport();
		report.addChapter(new TitleChapter());
		report.addChapter(new IndexChapter());
		report.addChapter(new ExtendedChapter());
		return report;
	}

}

// TestApp.java
package patterns.factorymethod;

import patterns.factorymethod.report.ReportCreator;

public class TestApp {

	public static void main(String[] args) {
		ReportCreator creator = new ReportCreator();
		creator.createFullReport().render();
		System.out.println();
		creator.createSummaryReport().render();
	}

}

Результат работы программы:

Title
Index
Extended

Title
Small

Comments

comments

2 comments On ООП для чайников. Паттерны проектирования. Паттерн фабричный метод (Factory method).

  • Не, это не для чайников, точно. Вот даже мне, действующему прогеру, все кажется очень туманным (в статье, а реализовать factory-то я могу, знаю, что за зверь). Мож как-то попроще?

  • Ява просто язык монструозный. На питоне бы вышло строк 20-30, и в разы понятнее, только там фабричный метод можно без ООП красивее сделать.

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: