Есть такая задача - программа для мебельной фабрики (учебная). Суть - реализация паттерна Factory. Я ещё совсем зелёный, смотрел разные примеры в нете, написал нечто, моделирующее деятельность мебельной фабрики. Пользователь формирует запрос (сделать столько-то стульев, столов и т.д.), фабрика его выполняет. Присутствует также склад с абстрактными "деталями", которые нужны для производства. Вопрос такой: насколько верно реализован паттерн? Примеры в нете разные, я запутался совсем.
Вот она, фабрика:
| Код | package MyFurnitureFactory;
public class FurnitureFactory { private static FurnitureFactory Instance;
public static final int TCHAIR = 0; public static final int TCUPBOARD = 1; public static final int TTABLE = 2; public static final int TDIVAN = 3;
public static final int PCHAIR = 50; public static final int PCUPBOARD = 300; public static final int PTABLE = 150; public static final int PDIVAN = 350;
private FurnitureFactory(){
}
public static FurnitureFactory getInstance() { if (Instance==null){Instance = new FurnitureFactory();} return Instance; }
public Product createProduct (int type) { Product unit = null; switch (type) { case TCHAIR : if (Store.getInstance().giveDetails(Chair.askDetails())) { unit = new Chair(); unit.setPrice(PCHAIR); unit.setType(TCHAIR); } break; case TDIVAN : if (Store.getInstance().giveDetails(Divan.askDetails())) { unit = new Divan(); unit.setPrice(PDIVAN); unit.setType(TDIVAN); } break; case TCUPBOARD : if (Store.getInstance().giveDetails(Cupboard.askDetails())) { unit = new Cupboard(); unit.setPrice(PCUPBOARD); unit.setType(TCUPBOARD); } break; case TTABLE : if (Store.getInstance().giveDetails(Table.askDetails())) { unit = new Table(); unit.setPrice(PTABLE); unit.setType(TTABLE); } break; default : unit = null; } return unit; } }
class Divan extends Product { public static int[] askDetails(){ return new int [] {50,20,0,20}; } }
class Cupboard extends Product{ public static int[] askDetails(){ return new int [] {40,20,2,0}; } }
class Table extends Product{ public static int[] askDetails(){ return new int [] {20,20,3,0}; } }
class Chair extends Product{
public static int[] askDetails(){ return new int [] {5,10,0,5}; } }
|
А вот класс Product, от которого происходят все столы и стулья:
| Код | package MyFurnitureFactory;
public abstract class Product { private int Type; private int Price;
public int getPrice() { return Price; }
public void setPrice(int price) { Price = price; }
public int getType() { return Type; }
public void setType(int type) { Type = type; }
public static int[] askDetails() {return new int [] {0,0,0,0}; } }
|
|