PHP-Entwurfsmuster: Factory-Muster

高洛峰
Freigeben: 2023-03-03 15:22:01
Original
971 Leute haben es durchsucht

Ursprünglich im Buch „Design Patterns“ wird in vielen Entwurfsmustern die Verwendung einer losen Kopplung empfohlen. Um dieses Konzept zu verstehen, ist es am besten, über die beschwerliche Reise zu sprechen, die viele Entwickler bei der Arbeit an großen Systemen durchlaufen. Wenn Sie einen Teil des Codes ändern, können Probleme auftreten und es kann zu kaskadierenden Unterbrechungen in anderen Teilen des Systems kommen – Teile, von denen Sie früher dachten, dass sie überhaupt nichts miteinander zu tun hätten.

Das Problem ist die enge Kopplung. Funktionen und Klassen in einem Teil des Systems hängen stark vom Verhalten und der Struktur von Funktionen und Klassen in anderen Teilen des Systems ab. Sie möchten eine Reihe von Mustern, die es diesen Klassen ermöglichen, miteinander zu kommunizieren, Sie möchten sie jedoch nicht eng miteinander verknüpfen, um eine gegenseitige Verzahnung zu vermeiden.

In großen Systemen hängt viel Code von einigen wenigen Schlüsselklassen ab. Wenn diese Klassen geändert werden müssen, kann es zu Schwierigkeiten kommen. Angenommen, Sie haben eine User-Klasse, die aus einer Datei liest. Sie möchten es in eine andere Klasse ändern, die aus der Datenbank liest, Ihr gesamter Code verweist jedoch auf die ursprüngliche Klasse, die aus der Datei liest. Zu diesem Zeitpunkt ist es sehr praktisch, den Werksmodus zu verwenden.

Factory Pattern ist eine Klasse mit bestimmten Methoden, 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.

Beispiel 1: Zeigen Sie eine Spalte der Factory-Klasse an. Die Serverseite der Gleichung besteht aus zwei Teilen: einer Datenbank und einer Reihe von PHP-Seiten, die es Ihnen ermöglichen, Feedback hinzuzufügen, eine Liste mit Feedback anzufordern und Artikel zu einem bestimmten Feedback zu erhalten.

interface IUser  
{  
  function getName();  
}  
 
class User implements IUser  
{  
  public function __construct( $id ) { }  
 
  public function getName()  
  {  
    return "Jack";  
  }  
}  
 
class UserFactory  
{  
  public static function Create( $id )  
  {  
    return new User( $id );  
  }  
}  
 
$uo = UserFactory::Create( 1 );  
echo( $uo->getName()."\n" );  
?>
Nach dem Login kopieren

Die IUser-Schnittstelle definiert, welche Operationen ein Benutzerobjekt ausführen soll. Die Implementierung von IUser heißt User, und die UserFactory-Factory-Klasse erstellt IUser-Objekte. Diese Beziehung kann durch UML in Abbildung 1 dargestellt werden.

工厂类及其相关 IUser 接口和用户类

Abbildung 1. Factory-Klasse und die zugehörige IUser-Schnittstelle und Benutzerklasse

Wenn Sie diesen Code in der Befehlszeile mit dem PHP-Interpreter ausführen, werden Sie dies tun get Die folgenden Ergebnisse:

% php factory1.php   
Jack  
%
Nach dem Login kopieren

Der Testcode fordert das Benutzerobjekt von der Factory an und gibt das Ergebnis der getName-Methode aus.

Es gibt eine Variante des Fabrikmusters, die Fabrikmethoden verwendet. Diese öffentlichen statischen Methoden in einer Klasse erstellen Objekte dieses Typs. Diese Methode ist nützlich, wenn es wichtig ist, Objekte dieses Typs zu erstellen. Angenommen, Sie müssen zunächst ein Objekt erstellen und dann eine Reihe von Eigenschaften festlegen. Diese Version des Factory-Musters kapselt den Prozess an einem einzigen Ort, sodass Sie keinen komplexen Initialisierungscode kopieren und in die gesamte Codebasis einfügen müssen.

Beispiel 2 zeigt ein Beispiel für die Verwendung von Factory-Methoden.

interface IUser  
{  
  function getName();  
}  
 
class User implements IUser  
{  
  public static function Load( $id )   
  {  
        return new User( $id );  
  }  
 
  public static function Create( )   
  {  
        return new User( null );  
  }  
 
  public function __construct( $id ) { }  
 
  public function getName()  
  {  
    return "Jack";  
  }  
}  
 
$uo = User::Load( 1 );  
echo( $uo->getName()."\n" );  
?>
Nach dem Login kopieren

Dieser Code ist viel einfacher. Es gibt nur eine Schnittstelle IUser und eine Benutzerklasse, die diese Schnittstelle implementiert. Die User-Klasse verfügt über zwei statische Methoden zum Erstellen von Objekten. Diese Beziehung kann durch UML in Abbildung 2 dargestellt werden.

IUser 接口和带有工厂方法的 user 类

Abbildung 2. IBenutzeroberfläche und Benutzerklasse mit Factory-Methode

Das Ausführen des Skripts in der Befehlszeile führt zu denselben Ergebnissen wie Listing 1, wie unten gezeigt :

% php factory2.php   
Jack  
%
Nach dem Login kopieren

Wie oben erwähnt, können solche Modi in kleineren Umgebungen manchmal übertrieben wirken. Es ist jedoch am besten, diese solide Form der Codierung zu erlernen, die Sie auf Projekte jeder Größe anwenden können.




Weitere Artikel zu PHP Design Pattern Talk Factory Pattern finden Sie unter PHP Chinesische 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