Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich des einfachen PHP-Fabrikmusters, des Fabrikmethodenmusters und des abstrakten Fabrikmusters

Vergleich des einfachen PHP-Fabrikmusters, des Fabrikmethodenmusters und des abstrakten Fabrikmusters

高洛峰
高洛峰Original
2017-03-18 10:49:331360Durchsuche

PHP Factory Pattern Konzept: Factory Pattern ist eine Klasse, die über bestimmte Methoden verfügt, die Objekte für Sie erstellen. Sie können eine Factory-Klasse verwenden, um Objekte zu erstellen, ohne new direkt zu verwenden. Wenn Sie auf diese Weise den Typ des erstellten Objekts ändern möchten, müssen Sie nur die Fabrik ändern. Der gesamte Code, der diese Fabrik verwendet, wird automatisch geändert.
Je nach verschiedenen Abstraktionsebenen werden PHP-Fabrikmuster unterteilt in: einfache Fabrikmuster, Fabrikmethodenmuster und abstrakte Fabrikmuster

Einfache Fabrikmuster:

/**
 *简单工厂模式与工厂方法模式比较。
 *简单工厂又叫静态工厂方法模式,这样理解可以确定,简单工厂模式是通过一个静态方法创建对象的。 
 */
interface  people {
    function  jiehun();
}
class man implements people{
    function jiehun() {
        echo &#39;送玫瑰,送戒指!<br>&#39;;
    }
}
 
class women implements people {
    function jiehun() {
        echo &#39;穿婚纱!<br>&#39;;
    }
}
 
class SimpleFactoty {
    // 简单工厂里的静态方法
    static function createMan() {
        return new     man;
    }
    static function createWomen() {
        return new     women;
    }
    
}
 
$man = SimpleFactoty::createMan();
$man->jiehun();
$man = SimpleFactoty::createWomen();
$man->jiehun();

Fabrikmethodenmuster:

<?php
/*
 *工厂方法模式:
 *定义一个创建对象的接口,让子类决定哪个类实例化。 他可以解决简单工厂模式中的封闭开放原则问题。<www.phpddt.com整理>
 */
interface  people {
    function  jiehun();
}
class man implements people{
    function jiehun() {
        echo &#39;送玫瑰,送戒指!<br>&#39;;
    }
}
 
class women implements people {
    function jiehun() {
        echo &#39;穿婚纱!<br>&#39;;
    }
}
 
interface  createMan {  // 注意了,这里是简单工厂本质区别所在,将对象的创建抽象成一个接口。
    function create();
 
}
class FactoryMan implements createMan{
    function create() {
        return  new man;
    }
}
class FactoryWomen implements createMan {
    function create() {
        return new women;
    }
}
 
class  Client {
    // 简单工厂里的静态方法
    function test() {
        $Factory =  new  FactoryMan;
        $man = $Factory->create();
        $man->jiehun();
        
        $Factory =  new  FactoryWomen;
        $man = $Factory->create();
        $man->jiehun();
    }
}
 
$f = new Client;
$f->test();

Abstraktes Fabrikmuster:

<?php
/*
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口。 
注意:这里和工厂方法的区别是:一系列,而工厂方法则是一个。
那么,我们是否就可以想到在接口create里再增加创建“一系列”对象的方法呢?
*/
interface  people {
    function  jiehun();
}
class Oman implements people{
    function jiehun() {
        echo &#39;美女,我送你玫瑰和戒指!<br>&#39;;
    }
}
class Iman implements people{
    function jiehun() {
        echo &#39;我偷偷喜欢你<br>&#39;;
    }
}
 
class Owomen implements people {
    function jiehun() {
        echo &#39;我要穿婚纱!<br>&#39;;
    }
}
 
class Iwomen implements people {
    function jiehun() {
        echo &#39;我好害羞哦!!<br>&#39;;
    }
}
 
interface  createMan {  // 注意了,这里是本质区别所在,将对象的创建抽象成一个接口。
    function createOpen(); //分为 内敛的和外向的
    function createIntro(); //内向
 
}
class FactoryMan implements createMan{
    function createOpen() {
        return  new  Oman;
    }
    function createIntro() {
        return  new Iman;
    }
}
class FactoryWomen implements createMan {
    function createOpen() {
        return  new  Owomen;
    }
    function createIntro() {
        return  new Iwomen;
    }
}
 
class  Client {
    // 简单工厂里的静态方法
    function test() {
        $Factory =  new  FactoryMan;
        $man = $Factory->createOpen();
        $man->jiehun();
        
        $man = $Factory->createIntro();
        $man->jiehun();
        
        
        $Factory =  new  FactoryWomen;
        $man = $Factory->createOpen();
        $man->jiehun();
        
        $man = $Factory->createIntro();
        $man->jiehun();
        
    }
}
 
$f = new Client;
$f->test();

Unterschied:

Einfaches Fabrikmuster: Wird verwendet, um jedes Produkt in derselben hierarchischen Struktur herzustellen. Sie können nichts gegen das Hinzufügen neuer Produkte unternehmen.

Fabrikmodus: Wird zur Herstellung fester Produkte in derselben hierarchischen Struktur verwendet. (Unterstützt das Hinzufügen beliebiger Produkte)
Abstrakte Fabrik: Wird zur Herstellung aller Produkte verschiedener Produktfamilien verwendet. (Sie können nichts gegen das Hinzufügen neuer Produkte unternehmen; das Hinzufügen von Produktfamilien wird unterstützt)

Die oben genannten drei Factory-Methoden bieten unterschiedliche Unterstützungsniveaus in den beiden Richtungen der hierarchischen Struktur und der Produktfamilie. Überlegen Sie also, welche Methode je nach Situation verwendet werden soll

Anwendbarer Bereich:

Einfacher Factory-Modus:

Die Factory-Klasse ist dafür verantwortlich, weniger Objekte zu erstellen, und zwar nur für den Kunden weiß, dass es in der Fabrik passieren soll Die Parameter der Klasse kümmern sich nicht darum, wie das Objekt erstellt wird.

Factory-Methodenmuster:

Wenn eine Klasse die Klasse des Objekts, das sie erstellen muss, nicht kennt oder eine Klasse möchte, dass eine Unterklasse das von ihr erstellte Objekt angibt, wann erstellt die Klasse das Objekt? Verwenden Sie das Factory-Methodenmuster, wenn Sie die Verantwortung an eine von mehreren Hilfsunterklassen delegieren und die Informationen darüber lokalisieren möchten, welche Hilfsunterklasse der Delegierte ist.

Abstraktes Fabrikmuster:

Ein System sollte nicht von den Details abhängen, wie Produktklasseninstanzen erstellt, zusammengesetzt und ausgedrückt werden. Dies ist für alle Formen von Fabrikmustern wichtig. Dieses System verfügt über mehr als eine Produktfamilie und das System nutzt nur eine der Produktfamilien. Produkte, die zur gleichen Produktfamilie gehören, werden zusammen verwendet, und diese Einschränkung muss im Systemdesign berücksichtigt werden. Das System stellt eine Produktklassenbibliothek bereit und alle Produkte werden mit derselben Schnittstelle angezeigt, sodass der Client nicht von der Implementierung abhängig ist.

Ob es sich um ein einfaches Factory-Muster, ein Factory-Muster oder ein abstraktes Factory-Muster handelt, sie extrahieren im Wesentlichen die unveränderlichen Teile und belassen die variablen Teile als Schnittstellen, um eine maximale Wiederverwendung zu erreichen. Welches Entwurfsmuster besser geeignet ist, hängt von den spezifischen Geschäftsanforderungen ab.

Weitere Artikel zum Vergleich von einfachen PHP-Fabrikmustern, Fabrikmethodenmustern und abstrakten Fabrikmustern finden Sie auf der chinesischen PHP-Website!

Verwandte Artikel:

Detaillierte Erläuterung des spezifischen Codes zur Implementierung des abstrakten Fabrikmusters in Java

Abstraktes Fabrikmuster von JAVA Design Muster

PHP objektorientierte Entwicklung – abstraktes Fabrikmuster

Stellungnahme:
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