Jeśli moja strona Ci pomogła, i chcesz aby była bardziej rozwijana, wesprzyj mnie
buy me a coffee
I. Wzorce kreacyjne
II. Wzorce strukturalne
III. Wzorce czynnościowe
|
Fabryka abstrakcyjna - Abstract Factory - wzorzec projektowy - java
1. Cel:
Fabryka abstrakcyjna to kreacyjny wzorzec projektowy, który pozwala tworzyć rodziny powiązanych obiektów
bez określania ich konkretnych klas.
Jest to implementacja fabryki która jest fabryką.
2. Problem:
Wyobraź sobie że tworzysz symulator sklepu meblowego. Generujesz zestawy meblowe które mają te same elementy,
tylko innego stylu takie jak: szafa, komoda, łóżko itp.
3. Rozwiązanie:
Abstrakcyjna fabryka wyraźnie sugeruje implementowanie interface-u dla każdego odrębnego produktu.
Następnie robisz każdy wariant produktu zgodnego inteface-em.
4. Diagram klas wzorca Fabryka abstrakcyjna:

5. Implementacja:
Pierwszą czynnością jest tworzenie interface-u naszej abstrakcyjnej fabryki.
public interface FabrykaMebli {
Szafa stworzSzafe();
Komoda stworzKomode();
Lozko stworzLozko();
}
Następnie tworzenie inteface-ów naszych produktów:
public interface Szafa {
String getWymiar();
}
public interface Komoda {
int getPolki();
}
public interface Lozko {
int getSzerokosc();
}
Kolejną cznnością jest już implementowanie konkretnej fabryki,
implementującej abstrakcyjną fabrykę.
public class AntyczneMebleFactory implements FabrykaMebli {
public Szafa stworzSzafe() {
return new AntycznaSzafa();
}
public Komoda stworzKomode() {
return new AntycznaKomoda();
}
public Lozko stworzLozko() {
return new AntyczneLozko();
}
}
oraz konkretne produkty.
public class AntycznaSzafa implements Szafa {
public String getWymiar() {
return "80x60x200";
}
}
public class AntycznaKomoda implements Komoda {
public int getPolki() {
return 6;
}
}
public class AntyczneLozko implements Lozko {
public int getSzerokosc() {
return 220;
}
}
Druga konkretna implementacja fabryki abstrakcyjnej. Oraz jej produktów:
public class NowoczesneMebleFactory implements FabrykaMebli {
public Szafa stworzSzafe() {
return new NowoczesnaSzafa();
}
public Komoda stworzKomode() {
return new NowoczesnaKomoda();
}
public Lozko stworzLozko() {
return new NowoczesnaLozko();
}
}
public class NowoczesnaSzafa implements Szafa {
public String getWymiar() {
return "60x60x180";
}
}
public class NowoczesnaKomoda implements Komoda {
public int getPolki() {
return 5;
}
}
public class NowoczesnaLozko implements Lozko {
public int getSzerokosc() {
return 200;
}
}
Klasa służąca do wyboru konkretnej fabryki abstrakcyjnej:
public class Factory {
public static FabrykaMebli getTypMebli(String typMebli) {
switch(typMebli) {
case "Antyczne":
return new AntyczneMebleFactory();
case "Nowoczesne":
return new NowoczesneMebleFactory();
default:
return null;
}
}
public static void main(String[] args){
FabrykaMebli antyczneMeble = getTypMebli("Antyczne");
Szafa szafaAntyczna = antyczneMeble.getSzafa();
System.out.println("Wymiar szafy antycznej:" + szafaAntyczna.getWymiar());
}
}
6. Zastosowanie w kodzie java:
- javax.xml.parsers.DocumentBuilderFactory#newInstance()
- javax.xml.transform.TransformerFactory#newInstance()
- javax.xml.xpath.XPathFactory#newInstance()
|