Heim > Artikel > Backend-Entwicklung > Lassen Sie uns über das abstrakte Factory-Muster in PHP sprechen
In diesem Artikel lernen Sie das abstrakte Fabrikmuster in PHP-Entwurfsmustern kennen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Das Highlight der Factory Pattern-Serie ist da, ja, das ist das gemunkelte Abstract Factory Pattern. Wie haben Sie sich gefühlt, als Sie den Namen zum ersten Mal gehört haben? Jedenfalls finde ich, dass dieses Ding sehr hochwertig sein sollte, schließlich enthält es das Wort „abstrakt“. Es wird gesagt, dass diese beiden Wörter in der Entwicklung wirklich ein hohes Entwicklungsniveau haben. Wenn sie zusammen mit dem Wort „abstrakt“ verwendet werden, scheint alles sehr mächtig zu sein. Allerdings kann man Abstract Factory tatsächlich als den großen Bruder des Fabrikmusters bezeichnen.
Solange Sie das Factory-Methodenmuster verstehen, ist es tatsächlich einfach, das abstrakte Factory-Muster zu verstehen. Wie sagt man es? Es ist immer noch die gleiche Verzögerung für Unterklassen und es ist immer noch die gleiche Rückgabe des angegebenen Objekts. Es ist nur so, dass die abstrakte Fabrik nicht nur ein Objekt zurückgibt, sondern eine Reihe davon.
GoF-Definition: Bietet eine Schnittstelle zum Erstellen einer Reihe verwandter oder voneinander abhängiger Objekte, ohne deren spezifische Klassen anzugeben.
GoF-Klassendiagramm:
// 商品A抽象接口 interface AbstractProductA { public function show(): void; } // 商品A1实现 class ProductA1 implements AbstractProductA { public function show(): void { echo 'ProductA1 is Show!' . PHP_EOL; } } // 商品A2实现 class ProductA2 implements AbstractProductA { public function show(): void { echo 'ProductA2 is Show!' . PHP_EOL; } } // 商品B抽象接口 interface AbstractProductB { public function show(): void; } // 商品B1实现 class ProductB1 implements AbstractProductB { public function show(): void { echo 'ProductB1 is Show!' . PHP_EOL; } } // 商品B2实现 class ProductB2 implements AbstractProductB { public function show(): void { echo 'ProductB2 is Show!' . PHP_EOL; } }
Produktimplementierung. Diesmal gibt es tatsächlich vier Produkte, nämlich A1, A2, B1 und B2 Beziehung zwischen A1 und B1 sind ähnliche verwandte Produkte, B1 und B2 sind ähnliche verwandte Produkte// 抽象工厂接口
interface AbstractFactory
{
// 创建商品A
public function CreateProductA(): AbstractProductA;
// 创建商品B
public function CreateProductB(): AbstractProductB;
}
// 工厂1,实现商品A1和商品B1
class ConcreteFactory1 implements AbstractFactory
{
public function CreateProductA(): AbstractProductA
{
return new ProductA1();
}
public function CreateProductB(): AbstractProductB
{
return new ProductB1();
}
}
// 工厂2,实现商品A2和商品B2
class ConcreteFactory2 implements AbstractFactory
{
public function CreateProductA(): AbstractProductA
{
return new ProductA2();
}
public function CreateProductB(): AbstractProductB
{
return new ProductB2();
}
}
Und unsere Fabrik ist auch Fabrik 1 und Fabrik 2, Fabrik 1 produziert zwei verwandte Produkte, A1 und B1. Für die verknüpften Produkte produziert Fabrik 2 zwei Produkte, A2 und B2. Okay, ich weiß, dass es hier noch etwas abstrakt ist, und ich verstehe vielleicht immer noch nicht, warum das so ist. Nehmen wir weiterhin die Mobiltelefonproduktion als Beispiel.
Vollständiger Code: Abstraktes Fabrikmuster
https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/abstract-factory.phpBeispiel
<?php interface Message { public function send(string $msg); } class AliYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '阿里云短信(原阿里大鱼)发送成功!短信内容:' . $msg; } } class BaiduYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '百度SMS短信发送成功!短信内容:' . $msg; } } class JiguangMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '极光短信发送成功!短信内容:' . $msg; } } interface Push { public function send(string $msg); } class AliYunPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '阿里云Android&iOS推送发送成功!推送内容:' . $msg; } } class BaiduYunPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '百度Android&iOS云推送发送成功!推送内容:' . $msg; } } class JiguangPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '极光推送发送成功!推送内容:' . $msg; } } interface MessageFactory{ public function createMessage(); public function createPush(); } class AliYunFactory implements MessageFactory{ public function createMessage(){ return new AliYunMessage(); } public function createPush(){ return new AliYunPush(); } } class BaiduYunFactory implements MessageFactory{ public function createMessage(){ return new BaiduYunMessage(); } public function createPush(){ return new BaiduYunPush(); } } class JiguangFactory implements MessageFactory{ public function createMessage(){ return new JiguangMessage(); } public function createPush(){ return new JiguangPush(); } } // 当前业务需要使用阿里云 $factory = new AliYunFactory(); // $factory = new BaiduYunFactory(); // $factory = new JiguangFactory(); $message = $factory->createMessage(); $push = $factory->createPush(); echo $message->send('您已经很久没有登录过系统了,记得回来哦!'); echo $push->send('您有新的红包已到帐,请查收!');
Vollständiger Quellcode: SMS-Versandfabrikmethode
https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source / abstract-factory-message-push.phpBeschreibung
Ist es sehr klar?
Richtig, wir haben zwei Produkte, eines ist Message und das andere ist Push, die zum Senden von Nachrichten bzw. zum Senden von Push-Nachrichten dienen.Das obige ist der detaillierte Inhalt vonLassen Sie uns über das abstrakte Factory-Muster in PHP sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!