Heim > Java > javaLernprogramm > Was ist ein abstraktes Fabrikmuster?

Was ist ein abstraktes Fabrikmuster?

PHP中文网
Freigeben: 2017-06-22 14:06:01
Original
1911 Leute haben es durchsucht

In diesem Artikel geht es um den letzten Fabriktyp. Beginnen wir mit

Abstraktes FabrikmusterDefinition(aus der Baidu-Enzyklopädie):
Abstraktes Fabrikmuster ist ein Fabrikmuster von allen Formen Die abstrakteste und allgemeinste Form. Das abstrakte Fabrikmuster bezieht sich auf ein Fabrikmuster, das verwendet wird, wenn mehrere abstrakte Rollen vorhanden sind.
Das abstrakte Fabrikmuster kann eine Schnittstelle zum Kunden bereitstellen, die es dem Kunden ermöglicht, Produktobjekte in mehreren Produktfamilien zu erstellen, ohne die spezifischen Produkte angeben zu müssen. Nach dem Liskov-Substitutionsprinzip sollte
Jeder Ort, der einen übergeordneten Typ akzeptiert, auch einen Untertyp akzeptieren können. Daher benötigt das System tatsächlich nur einige Instanzen desselben Typs wie diese abstrakten Produktrollen, nicht Instanzen dieser abstrakten Produkte.
Mit anderen Worten, Instanzen konkreter Unterklassen dieser abstrakten Produkte. Factory-Klassen sind für die Erstellung von Instanzen konkreter Unterklassen abstrakter Produkte verantwortlich.

UML-Klassendiagramm

Spezifischer Code:

public class Client {public static void main(String[] args) {//        Creator benzCreator = new BenzCreator();//        benzCreator.createCar().run();////        Creator bmwCreator = new BmwCreator();//        bmwCreator.createCar().run();AbstractFactory factory1 = new Factory1();
        factory1.createProductA().getProductAName();
        factory1.createProductB().getProductBName();

        AbstractFactory factory2 = new Factory2();
        factory2.createProductA().getProductAName();
        factory2.createProductB().getProductBName();
    }
}public interface AbstractFactory {
    AbstractProductA createProductA();

    AbstractProductB createProductB();
}public class Factory1 implements AbstractFactory {
    @Overridepublic AbstractProductA createProductA() {return new ProductA1();
    }

    @Overridepublic AbstractProductB createProductB() {return new ProductB1();
    }
}public class Factory2 implements AbstractFactory {

    @Overridepublic AbstractProductA createProductA() {return new ProductA2();
    }

    @Overridepublic AbstractProductB createProductB() {return new ProductB2();
    }
}public interface AbstractProductA {
       String getProductAName();
}public class ProductA1 implements AbstractProductA {
    ProductA1(){
        System.out.println("产品A1");
    }

    @Overridepublic String getProductAName() {return "产品A1名称";
    }
}public class ProductA2 implements AbstractProductA {
    ProductA2(){
        System.out.println("产品A2");
    }

    @Overridepublic String getProductAName() {return "产品A2名称";
    }
}public interface AbstractProductB {
    String getProductBName();
}public class ProductB1 implements AbstractProductB {
    ProductB1(){
        System.out.println("产品B1");
    }

    @Overridepublic String getProductBName() {return "产品B1名称";
    }
}public class ProductB2 implements AbstractProductB {
    ProductB2(){
        System.out.println("产品B2");
    }

    @Overridepublic String getProductBName() {return "产品B2名称";
    }
}
Nach dem Login kopieren

Produktfamilie:

bezieht sich auf eine Familie funktional verwandter Produkte, die sich in unterschiedlichen Produkthierarchiestrukturen befinden

Spezifische Beispiele :

Lassen Sie mich ein Beispiel geben, das möglicherweise nicht angemessen ist
Beispielsweise sind unsere Computer sowohl 32-Bit- als auch 64-Bit-Computer und die entsprechenden Maschinen installieren Software mit entsprechenden Bits
Zwei CDs mit 32-Bit- und 64-Bit-Software werden separat gespeichert. Bei der Installation der Maschine müssen Sie nur eine CD mitnehmen, um die gesamte Maschinensoftware zu installieren, ohne nach jeder Software einzeln suchen zu müssen.
Die Disc hier ist die spezifische Factory. Was ist, wenn jede Disc QQ und 360 hat (willst du nur kämpfen?)
Die 32-Bit-Disc hier ist Factory1 im obigen Code. Die 64-Bit-Disc hier ist Factory2 im obigen Code.
Der QQ auf der 32-Bit-CD ist ProduktA1 und der 360 ist ProduktB1
Der QQ auf der 64-Bit-CD ist ProduktA2 und der 360 ist ProduktB2

Für einen Anfänger wie mich reicht es aus, die richtige CD zu besorgen, man muss nicht sowohl die richtige QQ-Ziffer als auch die 360-Ziffer finden, ist das nicht toll?

Vor- und Nachteile
Vorteile:
Separate Schnittstelle und Implementierung, sodass der Kunde die spezifische Implementierung nicht kennen muss.
Es wird einfacher, Produktfamilien zu wechseln, so wie wenn eine 128-Bit-Maschine erscheint, muss nur eine zusätzliche CD hinzugefügt werden.

Nachteile:
Es ist nicht einfach, neue Produkte zu erweitern (stellen Sie sich vor, wie viele Klassen und Methoden Sie hinzufügen müssen, um ein Produkt hinzuzufügen).
Die hierarchische Struktur der Klasse ist kompliziert (schauen Sie sich einfach das Klassendiagramm an und Sie werden sich krank fühlen)

Essenz:

Wie ich bereits sagte, die Das Wesen der Factory-Methode besteht darin, die Implementierung zu wählen bedeutet, ein bestimmtes Produkt auszuwählen
Die abstrakte Fabrik bedeutet, eine Produktfamilie auszuwählen und von einem einzelnen Produkt zu einer Produktfamilie zu wechseln.

Nachdem wir mit dem Gespräch über die drei Fabrikmodelle fertig sind, werden wir uns zunächst mit der Beziehung, dem Unterschied und dem Entwicklungsprozess zwischen ihnen befassen und später darüber schreiben.

Das obige ist der detaillierte Inhalt vonWas ist ein abstraktes Fabrikmuster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage