Описание:
Паттерн Абстрактная фабрика предназначен для создания групп объектов, связанных между собой по смыслу. Например, каждая из реализаций Абстрактной фабрики может быть предназначена для определенной операционной системы. В качестве такой фабрики можно представить модель данных, реализации компонент которой могут меняться. В отличии от Фабричного метода, Абстрактная фабрика использует композицию.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Main { public static void main (String[] args){ HeroFactory hulkFactory = new HulkFactory(); printHeroInfo(hulkFactory); HeroFactory thorFactory = new ThorFactory(); printHeroInfo(thorFactory); } static void printHeroInfo(HeroFactory heroFactory){ System.out.println("Name: " + heroFactory.getClass() .getSimpleName()); System.out.println("Weapon: " + heroFactory.getWeapon() .getClass() .getSimpleName()); System.out.println("Super power: " + heroFactory.getSuperPower() .getClass() .getSimpleName()); } } |
1 2 3 4 5 6 |
Name: HulkFactory Weapon: Hands Super power: Strong Name: ThorFactory Weapon: Hammer Super power: Immortal |
Коды классов:
1 2 3 4 |
public interface HeroFactory { public Weapon getWeapon(); public SuperPower getSuperPower(); } |
1 2 3 4 5 6 7 8 9 10 11 |
public class HulkFactory implements HeroFactory { @Override public Weapon getWeapon() { return new Hands(); } @Override public SuperPower getSuperPower() { return new Strong(); } } |
1 2 3 4 5 6 7 8 9 10 11 |
public class ThorFactory implements HeroFactory{ @Override public Weapon getWeapon() { return new Hammer(); } @Override public SuperPower getSuperPower() { return new Immortal(); } } |
1 2 3 4 5 6 |
public interface Weapon {} public interface SuperPower {} public class Hands implements Weapon {} public class Strong implements SuperPower {} public class Hammer implements Weapon {} public class Immortal implements SuperPower {} |
UML-диаграмма:
Паттерн Абстрактная Фабрика