Шаблон Factory Java

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

clip_image002

Рис. 5.6. Пример реализации шаблона Factory

Решением проблемы может быть создание класса ClassFactory с одним методом getClassFromFactory(String id), возвращаемым значением которого будет ссылка на класс-вершину Base иерархии создаваемых классов.
В качестве параметра метода передается некоторое значение, в соответствии с которым будет осуществляться инициализация объекта одного из подклассов класса Base.

Программная реализация может быть представлена в общем виде следующим образом.

/*пример # 10 : создание объектов с помощью шаблона Factory : Base.java : First.java : Second.java : ClassFactory.java : Main.java */

package chapt05.factory;

public abstract class Base {

public abstract void perform();

}

package chapt05.factory;

public class First extends Base {

public void perform() {

System.out.println("First");

}

}

package chapt05.factory;

public class Second extends Base {

public void perform() {

System.out.println("Second");

}

}

package chapt05.factory;

public class ClassFactory {

private enum Signs {FIRST, SECOND}

public static Base getClassFromFactory(String id) {

Signs sign = Signs.valueOf(id.toUpperCase());

switch(sign){

case FIRST : return new First();

case SECOND : return new Second();

default : throw new EnumConstantNotPresentException(

Signs.class, sign.name());

}

}

}

package chapt05.factory;

public class Main {

public static void main(String args[]) {

Base ob1 =

ClassFactory.getClassFromFactory("first");

Base ob2 =

ClassFactory.getClassFromFactory("second");

ob1.perform();

ob2.perform();

}

}

Один из примеров применения данного шаблона уже был рассмотрен в примере # 5 предыдущей главы.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100