Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Factory Pattern (Java)

10K
14 февраля 2007 года
ljevik
48 / / 02.10.2006
Как бы вы реализовали эту задачу:

1) Given some data representing a computer, like:
- computerType: int (1 - PC, 2 - MAC, 3 - SPARC...)
- description: String (e.g. "used all over the world")

2) Create hierarchy of classes corresponding to every computer type.

3) Implement such class, which has static method to create specific computer
class for a given computer type. This kind of class uses widely known
"Factory Method" pattern (see Google: Factory Method Pattern, Factory Pattern)
and may look something like this:
Код:
public final class ShapeFactory {
public static Shape create(int type) {
switch (type) {
case CIRCLE:
return new Circle();
 
case TRIANGLE:
return new Triangle();
 
...
 
default:
return null;
}
}
}
/COLOR]
Hint: classes must have some common super class or interface,
e.g. Shape in the example above.

4) Add such method to the classes:
String getCompleteDescription();

This method should print different information depending on the exact class,
i.e. different classes should return different text since type and description
inside are different.

5) Test it by creating array different types of computers and outputting them in
console.

Можно без кода. Я создал класс Компьютер, и классы пентиум, мак, спрак, которые расширяют компьютер. Но не соображу в каком классе у меня должен быть метод майн, чтобы тэстить?
11K
15 февраля 2007 года
.nornad
125 / / 04.01.2007
main должен быть в отдельном классе. Нефиг его примешивать к нормальным объектам.
10K
15 февраля 2007 года
ljevik
48 / / 02.10.2006
ясно, а как тогда объекты создать? ведь я должен вызвать метод create из класса компьютер? Но вызывать нужно с определенным типом компьютера, это как-то странно получается:

Pentium pentium4 = Computer.create(Pentium.getType()); что наподобии этого?
11K
15 февраля 2007 года
.nornad
125 / / 04.01.2007
По условиям задачи ты должен для проверки создать массив случайных компов. Делаешь цикл на нужное количество и создаёшь почти так, как написал выше. Только тип берётся так:
 
Код:
Pentium.class
11K
15 февраля 2007 года
.nornad
125 / / 04.01.2007
Хотя, нет. Я на всякий случай перечитал задачу и понял, что ты неверно усвоил паттерн. Метод create в данном случае должен принадлежать не классу Computer, а классу фабрики. Иначе у тебя циклическая зависимость классов, что может привести к серьёзным проблемам.
10K
15 февраля 2007 года
ljevik
48 / / 02.10.2006
А класс фабрики это тот, который тестить будет? Где майн? А Компьютер тогда что содержит?:confused:
11K
15 февраля 2007 года
.nornad
125 / / 04.01.2007
Блин! Ну ты хоть сам-то прочти задание. Там есть вполне конкретный пример. А мэйн свой в паттерн пихать забудь - он снаружи должен лежать и не портить нормальную структуру.
10K
17 февраля 2007 года
ljevik
48 / / 02.10.2006
Вот что я получил, правильно?
Код:
package factory;
/*пока без массива компов*/
public class CreateComputer {
    public static void main(String[] args) {
        Computer pentium4 = Computer.create(Pentium.getType());
        Computer mac = Computer.create(Mac.getType());
        Computer sprac = Computer.create(Sprac.getType());
    }
}

public class Mac extends Computer {
    private static int type = 2;
    private String description = "Mac";
   
    Mac() {
        System.out.println(getDescriptin());
    }
    public String getDescriptin() {
        return description;
    }
    public static int getType() {
        return  type;
    }
}

public class Pentium extends Computer {
    private static int type = 1;
    private String description = "Pentium";
   
    Pentium() {
        System.out.println(getDescriptin());
    }
    public String getDescriptin() {
        return description;
    }
    public static int getType() {
        return type;
    }
}

public class Sprac extends Computer {
    private String description = "Sprac";
    private static int type = 3;
   
    Sprac() {
        System.out.println(getDescriptin());
    }
   
    public String getDescriptin() {
        return description;
    }
    public static int getType() {
        return  type;
    }
}

public class Computer {
    private final static int PENTIUM = 1;
    private final static int MAC = 2;
    private final static int SPRAC = 3;
   
    public static Computer create(int type) {
          switch (type) {
            case PENTIUM:
              return new Pentium();
            case MAC:
              return new Mac();
            case SPRAC:
                return new Sprac();
            default:
              return null;
          }
    }
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог