Factory Method. Паттерн Фабрика.
Фабричный метод - это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов в родительском классе, но позволяет подклассам изменять тип создаваемых объектов.
Во всех фабричных паттернах проектирования есть две группы участников — создатели (сами фабрики) и продукты (объекты, создаваемые фабриками).
Создадим интерфейс костюмов:
interface Suit {void showSuit();}
Будет два вида производимой продукции это мужские и женские костюмы. Создадим два класса, которые будут наследоваться от интерфейса Suit:
class SuitForMan
class SuitForMan implements Suit {@Overridepublic void showSuit() {System.out.println("Костюм для мужчин");}}
и class SuitForWomen
class SuitForWomen implements Suit {@Overridepublic void showSuit() {System.out.println("Костюм для женщин");}}
Создадим фабричный интерфейс, саму "Фабрику" по производству костюмов - фабрику "Большевичка"
interface TheBolshevichkaFactory
interface TheBolshevichkaFactory {Suit createSuit();}
У этой фабрики будет две линии по производству мужской и женской одежды:
class ClothingLineForMen
class ClothingLineForMen implements TheBolshevichkaFactory {@Overridepublic Suit createSuit() {return new SuitForMan();}}
и class ClothingLineForWomen
class ClothingLineForWomen implements TheBolshevichkaFactory {@Overridepublic Suit createSuit() {return new SuitForWomen();}}
Создадим линию по производству мужских(или) женских костюмов и выпустим мужской костюм
public class Main {public static void main(String[] args) {TheBolshevichkaFactory theBolshevichkaFactory = new ClothingLineForMen();Suit suit = theBolshevichkaFactory.createSuit();suit.showSuit();}}
Также, можно воспользоваться фабричным методом
public class Main {public static void main(String[] args) {TheBolshevichkaFactory theBolshevichkaFactory = getSuitByName("Man");Suit suit = theBolshevichkaFactory.createSuit();suit.showSuit();}// Фабричный методpublic static TheBolshevichkaFactory getSuitByName(String maker) {if (maker.equals("Man")) {return new ClothingLineForMen();} else if (maker.equals("Woman")) {return new ClothingLineForWomen();}return null;}}