Amser darllen amcangyfrifedig: 6 minuti
Nid yw patrwm dylunio yn god y gallwn ei gopïo a'i fewnosod yn ein rhaglen, fel y gallwn ei wneud gyda swyddogaethau neu lyfrgelloedd safonol. Mae'r patrwm dylunio yn gysyniad cyffredinol sy'n gallu datrys problem benodol. Yn y bôn model y gallwn ei ddilyn a gweithredu datrysiad sy'n cyd-fynd â realiti ein rhaglen.
Mae modelau yn aml yn cael eu drysu ag algorithmau, oherwydd mae'r ddau gysyniad yn disgrifio atebion nodweddiadol i rai problemau hysbys. Er bod algorithm defiOs oes bob amser set glir o gamau gweithredu a all gyflawni nod penodol, mae model yn ddisgrifiad lefel uwch o ddatrysiad. Gall cod o'r un model a ddefnyddir ar gyfer dwy raglen wahanol fod yn wahanol.
Gan fod eisiau gwneud cyfatebiaeth, gallwn feddwl am rysáit coginio: mae gan y ddau gamau clir i gyrraedd nod. Fodd bynnag, mae model yn debycach i brosiect, y gallwch chi weld beth yw'r canlyniad a'i nodweddion, ond mae union drefn gweithredu yn dibynnu arnom ni sy'n ysgrifennu'r cod.
Disgrifir y rhan fwyaf o batrymau yn ffurfiol iawn fel y gall pobl eu hatgynhyrchu mewn llawer o gyd-destunau. Gadewch i ni weld isod yr elfennau sy'n bresennol yn y disgrifiad o fodel:
Gall rhaglennydd ddatblygu meddalwedd heb wybod am fodolaeth patrymau dylunio. Mae llawer yn gwneud hynny, ac am y rheswm hwn maent yn gweithredu rhai cynlluniau heb yn wybod iddynt. Ond wedyn pam dylen ni dreulio amser yn eu dysgu?
Mae patrymau dylunio'n amrywio o ran cymhlethdod, lefel y manylder, a graddfa'r cymhwysedd ar draws y system a ddyluniwyd.
Trwy gyfatebiaeth, gallwn wneud croestoriad yn fwy diogel trwy osod ychydig o oleuadau traffig neu adeiladu cyfnewidfa aml-lefel gyfan gyda llwybrau tanddaearol i gerddwyr.
Gelwir y modelau lefel isel mwyaf sylfaenol yn aml priod-ddulliau . Fel arfer maent yn berthnasol i un iaith raglennu yn unig.
Mae'r modelau mwyaf cyffredinol a lefel uchel modelau pensaernïol . Gall datblygwyr weithredu'r patrymau hyn mewn bron unrhyw iaith. Yn wahanol i batrymau eraill, gellir eu defnyddio i ddylunio pensaernïaeth cais cyfan.
Ar ben hynny, gellir dosbarthu pob model yn ôl eu ceisio neu bwrpas. Y tri phrif ddosbarth yw:
Facade yn batrwm dylunio strwythurol sy'n darparu rhyngwyneb symlach i lyfrgell, fframwaith, neu unrhyw set gymhleth arall o ddosbarthiadau.
Gadewch i ni dybio bod angen i ni wneud i feddalwedd weithio, yn seiliedig ar set fawr o wrthrychau sy'n perthyn i lyfrgell neu fframwaith soffistigedig. Fel rheol, byddai angen i ni gychwyn yr holl wrthrychau hyn, cadw golwg ar ddibyniaethau, gweithredu dulliau yn y drefn gywir, ac ati.
O ganlyniad, byddai rhesymeg busnes y dosbarthiadau yn cael eu cysylltu'n dynn â manylion gweithredu dosbarthiadau trydydd parti, gan eu gwneud yn anodd eu deall a'u rheoli.
a facade
yn ddosbarth sy'n darparu rhyngwyneb syml i is-system gymhleth sy'n cynnwys llawer o rannau symudol. A facade
gall ddarparu ymarferoldeb cyfyngedig o gymharu â gweithio'n uniongyrchol gyda'r is-system. Fodd bynnag, dim ond y nodweddion y mae cwsmeriaid yn poeni amdanynt mewn gwirionedd y mae'n eu cynnwys.
Cael un facade
mae'n ddefnyddiol pan fydd angen i ni integreiddio'r app â llyfrgell soffistigedig sydd â dwsinau o nodweddion, ond dim ond rhan fach o'i ymarferoldeb sydd ei angen arnom.
Er enghraifft, gallai ap sy'n uwchlwytho fideos doniol byr gyda chathod i gyfryngau cymdeithasol o bosibl ddefnyddio llyfrgell trosi fideos proffesiynol. Fodd bynnag, y cyfan sydd ei angen arnom mewn gwirionedd yw dosbarth gyda'r un dull encode(filename, format)
. Ar ôl creu dosbarth o'r fath a'i gysylltu â'r llyfrgell trosi fideo, bydd gennym ein un cyntaf facade
.
Er enghraifft, mae gweithredwr ffôn canolfan alwadau fel a facade
. Mewn gwirionedd, pan fyddwn yn galw gwasanaeth ffôn siop i osod archeb ffôn, ni yw gweithredwr facade
tuag at holl wasanaethau ac adrannau'r siop. Mae'r gweithredwr yn darparu rhyngwyneb llais syml i'r system archebu, pyrth talu a gwasanaethau dosbarthu amrywiol.
Meddyliwch am Facade fel addasydd syml ar gyfer rhai is-systemau cymhleth. Facade
yn ynysu'r cymhlethdod o fewn un dosbarth ac yn caniatáu i god cymhwysiad arall ddefnyddio'r rhyngwyneb syml.
Yn yr enghraifft hon, Facade
yn cuddio cymhlethdod y llyfrgell YouTube API a FFmpeg o'r cod cleient. Yn hytrach na gweithio gyda dwsinau o ddosbarthiadau, mae'r cleient yn defnyddio dull syml ar Facade.
<?php
namespace RefactoringGuru\Facade\RealWorld;
/**
* The Facade provides a single method for downloading videos from YouTube. This
* method hides all the complexity of the PHP network layer, YouTube API and the
* video conversion library (FFmpeg).
*/
class YouTubeDownloader
{
protected $youtube;
protected $ffmpeg;
/**
* It is handy when the Facade can manage the lifecycle of the subsystem it
* uses.
*/
public function __construct(string $youtubeApiKey)
{
$this->youtube = new YouTube($youtubeApiKey);
$this->ffmpeg = new FFMpeg();
}
/**
* The Facade provides a simple method for downloading video and encoding it
* to a target format (for the sake of simplicity, the real-world code is
* commented-out).
*/
public function downloadVideo(string $url): void
{
echo "Fetching video metadata from youtube...\n";
// $title = $this->youtube->fetchVideo($url)->getTitle();
echo "Saving video file to a temporary file...\n";
// $this->youtube->saveAs($url, "video.mpg");
echo "Processing source video...\n";
// $video = $this->ffmpeg->open('video.mpg');
echo "Normalizing and resizing the video to smaller dimensions...\n";
// $video
// ->filters()
// ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
// ->synchronize();
echo "Capturing preview image...\n";
// $video
// ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
// ->save($title . 'frame.jpg');
echo "Saving video in target formats...\n";
// $video
// ->save(new FFMpeg\Format\Video\X264(), $title . '.mp4')
// ->save(new FFMpeg\Format\Video\WMV(), $title . '.wmv')
// ->save(new FFMpeg\Format\Video\WebM(), $title . '.webm');
echo "Done!\n";
}
}
/**
* The YouTube API subsystem.
*/
class YouTube
{
public function fetchVideo(): string { /* ... */ }
public function saveAs(string $path): void { /* ... */ }
// ...more methods and classes...
}
/**
* The FFmpeg subsystem (a complex video/audio conversion library).
*/
class FFMpeg
{
public static function create(): FFMpeg { /* ... */ }
public function open(string $video): void { /* ... */ }
// ...more methods and classes... RU: ...дополнительные методы и классы...
}
class FFMpegVideo
{
public function filters(): self { /* ... */ }
public function resize(): self { /* ... */ }
public function synchronize(): self { /* ... */ }
public function frame(): self { /* ... */ }
public function save(string $path): self { /* ... */ }
// ...more methods and classes... RU: ...дополнительные методы и классы...
}
/**
* The client code does not depend on any subsystem's classes. Any changes
* inside the subsystem's code won't affect the client code. You will only need
* to update the Facade.
*/
function clientCode(YouTubeDownloader $facade)
{
// ...
$facade->downloadVideo("https://www.youtube.com/watch?v=QH2-TGUlwu4");
// ...
}
$facade = new YouTubeDownloader("APIKEY-XXXXXXXXX");
clientCode($facade);
Ercole Palmeri
Bydd Coveware gan Veeam yn parhau i ddarparu gwasanaethau ymateb i ddigwyddiadau cribddeiliaeth seiber. Bydd Coveware yn cynnig galluoedd fforensig ac adfer…
Mae gwaith cynnal a chadw rhagfynegol yn chwyldroi'r sector olew a nwy, gyda dull arloesol a rhagweithiol o reoli planhigion.…
Mae CMA y DU wedi cyhoeddi rhybudd am ymddygiad Big Tech yn y farchnad deallusrwydd artiffisial. Yno…
Mae'r Archddyfarniad "Achos Gwyrdd", a luniwyd gan yr Undeb Ewropeaidd i wella effeithlonrwydd ynni adeiladau, wedi dod â'i broses ddeddfwriaethol i ben gyda…