Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Программа для мебельной фабрики


Автор: Loba4evsky 11.12.2010, 17:26
Есть такая задача - программа для мебельной фабрики (учебная). Суть - реализация паттерна 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}; }
    
}

 smile 

Автор: AntonSaburov 12.12.2010, 14:00
В принципе разумно. Правда классы реальных продуктов наверно надо выделять в отдельные файлы. 
И делать createProduct можно и в виде static. А так нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)