Инструменты пользователя

Инструменты сайта


pattern_simplefactory

Назад

Простая фабрика вообще не является паттерном проектирования, это скорее идиома программирования (устоявшаяся практика).

Pizza
public interface Pizza
{
    public void getPizza();
    public double getPrice();
}
 
class CheesePizza implements Pizza
{
    public void getPizza()
    {
        System.out.println("Cheese Pizza");
    }
 
    public double getPrice()
    {
        return 30.50;
    }
}
 
class PepperoniPizza implements Pizza
{
    public void getPizza()
    {
        System.out.println("Pepperoni Pizza");
    }
 
    public double getPrice()
    {
        return 20;
    } 
}
SimplePizzaFactory
public class SimplePizzaFactory
{
    private Pizza pizza = null;
    public Pizza create(String type)
    {
        switch(type)
        {
            case "cheese":
            {
                pizza = new CheesePizza();
            }break;
            case "pepperoni":
            {
                pizza = new PepperoniPizza();
            }break;
        }
        return pizza;
    }
}
Main
public class Main
{
    public static void main(String[] args)
    {
        SimplePizzaFactory factory = new SimplePizzaFactory();
        Pizza pizza1 = factory.create("cheese");
        pizza1.getPizza();
        System.out.println("Цена "+pizza1.getPrice());
 
        Pizza pizza2 = factory.create("pepperoni");
        pizza2.getPizza();
        System.out.println("Цена "+pizza2.getPrice());
    }
}
  1. Фабричный класс не должен ничего содержать, кроме создания объектов.
  2. Во всем остальном коде мы не должны создавать объекты напрямую, только через фабрику.
  3. В фабрике можно использовать статический метод, это избавит от создания объекта фабрики, но помешает дальнейшему наследованию класса.