Bir Facade(önyüz), bir veya birden fazla arayüzü gömerek (interface injection) bir istemci ve bir alt sistemi ayrıştırmak ve tabii ki karmaşıklığı azaltmak içindir.
-Bir Facade(önyüz) alt sisteme erişimi yasaklamaz.
-Bir alt sistem için birden fazla Facade(önyüz)’ye sahip olabilirsiniz (olmalısınız).
İyi tasarlamış bir önyüzde new diye bir şey olmamasının nedeni budur. Her yöntem için birden fazla oluşturum varsa (multiple creation), bu artık bir Önyüz değil, bir Yapıcı (Builder) ya da [Soyut (Abstract)|Statik (Static)|Basit (Simple)] Fabrika (Factory) [Yöntem (Method)] olur.
En iyi önyüz new içermeyen ve kurucusu (constructor) arayüz türü ipuçlanarak (interface-type-hinted) parametrize edilmiş olandır. Şayet yeni örnekler (instance) oluşturmanız gerekiyorsa, argüman olarak bir Fabrika (Factory) kullanın.
Örneğe ait kodlar;
<?php // Facade.php declare(strict_types=1); namespace DesignPatterns\Structural\Facade; class Facade { public function __construct(private Bios $bios, private OperatingSystem $os) { } public function turnOn() { $this->bios->execute(); $this->bios->waitForKeyPress(); $this->bios->launch($this->os); } public function turnOff() { $this->os->halt(); $this->bios->powerDown(); } } // OperatingSystem.php declare(strict_types=1); namespace DesignPatterns\Structural\Facade; interface OperatingSystem { public function halt(); public function getName(): string; } // Bios.php declare(strict_types=1); namespace DesignPatterns\Structural\Facade; interface Bios { public function execute(); public function waitForKeyPress(); public function launch(OperatingSystem $os); public function powerDown(); }
Test İşlemi şu şekilde olacaktır;
İlk Yorumu Siz Yapın