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;
}
}
}
Factory Pattern (Java)
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:
Код:
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.
Можно без кода. Я создал класс Компьютер, и классы пентиум, мак, спрак, которые расширяют компьютер. Но не соображу в каком классе у меня должен быть метод майн, чтобы тэстить?
main должен быть в отдельном классе. Нефиг его примешивать к нормальным объектам.
Pentium pentium4 = Computer.create(Pentium.getType()); что наподобии этого?
Код:
Pentium.class
Хотя, нет. Я на всякий случай перечитал задачу и понял, что ты неверно усвоил паттерн. Метод create в данном случае должен принадлежать не классу Computer, а классу фабрики. Иначе у тебя циклическая зависимость классов, что может привести к серьёзным проблемам.
А класс фабрики это тот, который тестить будет? Где майн? А Компьютер тогда что содержит?:confused:
Блин! Ну ты хоть сам-то прочти задание. Там есть вполне конкретный пример. А мэйн свой в паттерн пихать забудь - он снаружи должен лежать и не портить нормальную структуру.
Код:
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;
}
}
}
/*пока без массива компов*/
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;
}
}
}