четверг, 11 августа 2011 г.

Паттерн фабричный метод. Пример кода


//product
public interface MilkProduct {
    String getName();
    float getWeight();
}


//creator
//в абстрактном классе можно сделать процедуры по созданию продукта по умолчанию
//или какие-то общие действия
public abstract class MilkProductCreator {
    abstract public MilkProduct getProduct();
}


//concrete product
public class Butter implements MilkProduct {
    private float weight = 3.5f;
    final private static String NAME = "Масло";

    @Override
    public float getWeight() {
        return weight;
    }

    @Override
    public String getName() {
        return NAME;
    } 
}


//concrete product
public class SourCream implements MilkProduct {
    private float weight = 1.3f;
    final private static String NAME = "Сметана";

    @Override
    public float getWeight() {
        return weight;
    }

    @Override
    public String getName() {
        return NAME;
    }  
    
}


//concrete creator
public class ButterCreator extends MilkProductCreator {

    @Override
    public MilkProduct getProduct() {
        return new Butter();
    }

}


//concrete creator
public class SourCreamCreator extends MilkProductCreator {

    @Override
    public MilkProduct getProduct() {
        return new SourCream();
    }

}


public class Application {
    public static void main(String[] args) {
        
        MilkProductCreator[] milkProductCreators = {
            new ButterCreator(),
            new SourCreamCreator()
        };
        
        for (MilkProductCreator milkProductCreator : milkProductCreators) {
            MilkProduct milkProduct = milkProductCreator.getProduct();
            System.out.printf(
                "%s. Вес: %.1f кг\n",
                milkProduct.getName(), milkProduct.getWeight()
            );
        }
    }
}
/*
 * Output:
 * Сметана. Вес: 1,3 кг
 * Масло. Вес: 3,5 кг
 */



1 комментарий: