Articles

Dè a th’ ann am pàtrain dealbhaidh: carson a thathas gan cleachdadh, seòrsachadh, buannachdan agus eas-bhuannachdan

Ann an innleadaireachd bathar-bog, tha pàtrain dealbhaidh nam fuasglaidhean as fheàrr do dhuilgheadasan a tha gu tric a’ nochdadh ann an dealbhadh bathar-bog.

Tha iad coltach ri ro-phròiseactandefiinnealan nite, fheuchainn is deuchainneach as urrainn dhut a ghnàthachadh gus fuasgladh fhaighinn air duilgheadas dealbhaidh a tha a’ nochdadh sa chòd agad a tha a’ nochdadh uair is uair.

Ùine leughaidh tuairmseach: 6 minuti

Dè a th 'ann am pàtran dealbhaidh

Chan e còd a th’ ann am pàtran dealbhaidh as urrainn dhuinn a chopaigeadh agus a chuir a-steach don phrògram againn, mar as urrainn dhuinn a dhèanamh le gnìomhan àbhaisteach no leabharlannan. Tha am pàtran dealbhaidh na bhun-bheachd coitcheann a tha comasach air fuasgladh fhaighinn air duilgheadas sònraichte. Gu bunaiteach modail leis am faod sinn mion-fhiosrachadh a leantainn agus fuasgladh a chuir an gnìomh a fhreagras air fìrinn ar prògram.

Bidh modalan gu tric air am mealladh le algoirmean, oir tha an dà bhun-bheachd a’ toirt cunntas air fuasglaidhean àbhaisteach do chuid de dhuilgheadasan aithnichte. Fhad 'sa tha an algairim defiMa tha an-còmhnaidh seata soilleir de ghnìomhan ann as urrainn amas sònraichte a choileanadh, tha modail na thuairisgeul ìre nas àirde air fuasgladh. Faodaidh còd bhon aon mhodail a chaidh a chuir an sàs ann an dà phrògram eadar-dhealaichte a bhith eadar-dhealaichte.

Ag iarraidh samhlachadh a dhèanamh, is urrainn dhuinn smaoineachadh air reasabaidh còcaireachd: tha ceumannan soilleir aig an dithis aca gus amas a choileanadh. Ach, tha modail nas coltaiche ri pròiseact, agus chì thu dè an toradh agus na feartan aige, ach tha an dearbh òrdugh buileachaidh an urra ri cò a sgrìobhas an còd.

Cò às a tha Pàtran Dealbhaidh air a dhèanamh?

Tha a’ mhòr-chuid de phàtranan air am mìneachadh gu foirmeil gus an urrainn do dhaoine an ath-riochdachadh ann an iomadh suidheachadh. Chì sinn gu h-ìosal na h-eileamaidean a tha an làthair anns an tuairisgeul air modail:

  • An rùn den mhodail a’ toirt cunntas goirid air an dà chuid an duilgheadas agus am fuasgladh.
  • An spreagadh mìnichidh e an duilgheadas agus am fuasgladh a tha am modail comasach.
  • Structar de chlasaichean a’ sealltainn gach pàirt den mhodail agus mar a tha iad càirdeach.
  • Eisimpleir còd ann an aon de na cànanan prògramaidh as mòr-chòrdte ga dhèanamh nas fhasa am beachd air cùl a’ mhodail a thuigsinn.

Carson a chleachdas tu iad?

Faodaidh prògramadair bathar-bog a leasachadh gun fhios gu bheil pàtrain dealbhaidh ann. Bidh mòran a 'dèanamh, agus air an adhbhar seo bidh iad a' cur an gnìomh cuid de sgeamaichean gun fhios dha. Ach an uairsin carson a bu chòir dhuinn ùine a chaitheamh gan ionnsachadh?

  • Tha na pàtrain dealbhaidh nan seata de fuasglaidhean deuchainneach agus deuchainneach gu duilgheadasan cumanta ann an dealbhadh bathar-bog. Fiù mura coinnich thu ris na duilgheadasan sin a-riamh, tha eòlas air pàtrain fhathast feumail oir bidh e a’ teagasg dhut mar a dh ’fhuasglas tu a h-uile seòrsa duilgheadas a’ cleachdadh prionnsapalan dealbhaidh a tha ag amas air nithean.
  • Na modailean dealbhaidh defiBidh iad a’ cruthachadh cànan cumanta as urrainn dhut fhèin agus an sgioba agad a chleachdadh gus conaltradh nas èifeachdaiche a dhèanamh. Dh’ fhaodadh tu a ràdh, “O, dìreach cleachd Singleton airson seo a dhèanamh,” agus tuigidh a h-uile duine am beachd a tha air cùl do mholadh. Chan fheumar mìneachadh dè a th’ ann an singleton ma tha thu eòlach air a’ phàtran agus an t-ainm a th’ air.

Seòrsachadh phàtranan dealbhaidh

Tha pàtrain dealbhaidh eadar-dhealaichte ann an iom-fhillteachd, ìre mion-fhiosrachaidh, agus meud iomchaidheachd air feadh an t-siostam dealbhaichte.

Le samhlachadh, is urrainn dhuinn eadar-ghearradh a dhèanamh nas sàbhailte le bhith a’ stàladh beagan sholais trafaic no a’ togail iomlaid ioma-ìre gu lèir le trannsaichean fon talamh airson luchd-coiseachd.

Canar gu tric na modailean as bunaitiche, ìre ìosal gnàthasan-cainnte . Mar as trice chan eil iad a’ buntainn ach ri aon chànan prògramaidh.

Is e na modailean as cruinne agus àrd-ìre modailean ailtireachd . Faodaidh luchd-leasachaidh na pàtrain sin a chuir an gnìomh ann an cha mhòr cànan sam bith. Eu-coltach ri pàtrain eile, faodar an cleachdadh gus ailtireachd tagradh slàn a dhealbhadh.

A bharrachd air an sin, faodar a h-uile modal a sheòrsachadh a rèir an cuid dh ’fheuch no adhbhar. Is iad na trì prìomh chlasaichean:

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.
  • Modailean cruthachail bidh iad a’ toirt seachad dòighean cruthachaidh stuthan a mheudaicheas sùbailteachd agus ath-chleachdadh a’ chòd a th’ ann mar-thà.
  • Modailean structarail bidh iad a’ mìneachadh mar a chruinnicheas iad nithean agus clasaichean gu structaran nas motha, a’ cumail nan structaran sin sùbailte agus èifeachdach.
  • Modailean giùlain bidh iad a’ dèiligeadh ri conaltradh èifeachdach agus sònrachadh dhleastanasan eadar nithean.

Eisimpleir de phàtran dealbhaidh ann an Laravel: Facade

aodann na phàtran dealbhaidh structarail a bheir seachad eadar-aghaidh nas sìmplidhe do leabharlann, frèam, no seata chlasaichean iom-fhillte sam bith eile.

Duilgheadas

Gabhamaid ris gum feum sinn toirt air bathar-bog obrachadh, stèidhichte air seata mòr de nithean a bhuineas do leabharlann no frèam sòlaimte. Mar as trice, dh'fheumadh sinn na nithean sin uile a thòiseachadh, sùil a chumail air eisimeileachd, dòighean a chur an gnìomh san òrdugh cheart, agus mar sin air adhart.

Mar thoradh air an sin, bhiodh loidsig gnìomhachais nan clasaichean ceangailte gu teann ri mion-fhiosrachadh buileachaidh chlasaichean treas-phàrtaidh, gan dèanamh duilich a thuigsinn agus a riaghladh.

Fuasgladh

Una facade na chlas a bheir seachad eadar-aghaidh sìmplidh gu fo-shiostam iom-fhillte anns a bheil mòran phàirtean gluasadach. A facade faodaidh iad comas-gnìomh cuibhrichte a thoirt seachad an taca ri bhith ag obair gu dìreach leis an fho-shiostam. Ach, chan eil e a’ toirt a-steach ach na feartan a tha fìor dha-rìribh do luchd-ceannach.

Tha aon agad facade tha e feumail nuair a dh’ fheumas sinn an aplacaid fhilleadh a-steach le leabharlann sòlaimte anns a bheil dusanan de fheartan, ach chan fheum sinn ach pàirt bheag den ghnìomhachd aige.

Mar eisimpleir, dh’ fhaodadh aplacaid a luchdaicheas suas bhideothan goirid èibhinn le cait gu na meadhanan sòisealta leabharlann tionndaidh bhidio proifeasanta a chleachdadh. Ach, chan eil againn ach clas leis an aon dòigh encode(filename, format). Às deidh a leithid de chlas a chruthachadh agus a cheangal ris an leabharlann tionndadh bhidio, bidh a’ chiad fhear againn facade.

Mar eisimpleir, tha gnìomhaiche fòn ionad gairm mar a facade. Gu dearbh, nuair a chuireas sinn fios gu seirbheis fòn stòr gus òrdugh fòn a chuir a-steach, is ann leinn fhìn a tha gnìomhaiche facade a dh’ ionnsaigh a h-uile seirbheis agus roinn den bhùth. Bidh an gnìomhaiche a’ toirt seachad eadar-aghaidh guth sìmplidh don t-siostam òrdachaidh, geataichean pàighidh agus diofar sheirbheisean lìbhrigidh.

Eisimpleir fìor ann am PHP

Smaoinich air aodann mar inneal-atharrachaidh sìmplidh airson cuid de fo-shiostaman iom-fhillte. Facade a’ dealachadh iom-fhillteachd taobh a-staigh aon chlas agus a’ leigeil le còd tagraidh eile an eadar-aghaidh sìmplidh a chleachdadh.

Anns an eisimpleir seo, Facade a’ falach iom-fhillteachd leabharlann YouTube API agus FFmpeg bhon chòd teachdaiche. An àite a bhith ag obair le dusanan de chlasaichean, an neach-dèiligidh a 'cleachdadh modh sìmplidh air 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

Leabhar-latha ùr-ghnàthachaidh
Na caill na naidheachdan as cudromaiche mu ùr-ghnàthachadh. Clàraich gus am faighinn air post-d.

Altan o chionn ghoirid

Tha Veeam a’ nochdadh an taic as coileanta airson ransomware, bho dhìon gu freagairt agus faighinn seachad air

Leanaidh Coveware le Veeam a’ toirt seachad seirbheisean freagairt tachartas saidhbear. Bidh Coveware a’ tabhann comasan forensics agus leigheas…

23 Giblean 2024

Ar-a-mach Uaine is Didseatach: Mar a tha cumail suas ro-innseach ag atharrachadh gnìomhachas na h-ola is a’ ghas

Tha cumail suas ro-innse ag atharrachadh roinn na h-ola & gas, le dòigh-obrach ùr-ghnàthach agus for-ghnìomhach a thaobh riaghladh planntrais.…

22 Giblean 2024

Riaghladair antitrust na RA a’ togail inneal-rabhaidh BigTech thairis air GenAI

Tha CMA na RA air rabhadh a chuir a-mach mu ghiùlan Big Tech anns a’ mhargaidh fiosrachaidh fuadain. An sin…

18 Giblean 2024

Casa Green: tionndadh lùtha airson àm ri teachd seasmhach san Eadailt

Tha an t-òrdugh “Taighean Uaine”, a chuir an Aonadh Eòrpach ri chèile gus èifeachdas lùtha thogalaichean a neartachadh, air a phròiseas reachdail a thoirt gu crìch le…

18 Giblean 2024