Sisustusarkkitehdin malli on kuin vohveli

Sisustussuunnittelijamalli tarkoittaa lisäominaisuuksien lisäämistä olemassa olevaan esineeseen.

Kuulostaako siitä ranskaksi?

Ei huolia.

Palaamme tähän myöhemmin.

Katsotaanpa ensin joitain vohveleita!

Vohvelien neroinen osa on, että ne alkavat selkeät ja yksinkertaiset. Koska ne ovat tavallisia, melkein kaikki maistuu heiltä hyvältä

Jotkut vohveleiden yleiset täyteaineet ovat mansikat, mustikat, karhunvatukat, banaanit, mantelit ja siirapit.

Yritetään luoda kokoelma erilaisia ​​vohveliobjekteja.

Tulee StrawberryWaffle, BlueberryWaffle, BlackberryWaffle, BananaWaffle, AlmondWaffle ja SyrupWaffle.

Odota, meillä voi olla mansikoita ja mustikoita samassa vohvelissa. Tämä antaa meille StrawberryBlueberryWafflen.

Meillä voi olla myös mansikoita ja karhunvatukkaa samassa vohvelissa. Tämä antaa meille StrawberryBlackberryWafflen.

Kukaan ei estä meitä laittamasta kolme täytettä samaan vohveliin. Tämä antaa meille StrawberryBlueberryBlackberryWafflen.

Jotta asiat olisivat yksinkertaisia, harkitaan mansikoita, mustikoita ja karhunvatukoja potentiaalisina lisäyksinä. On kahdeksan erilaista yhdistelmää [1].

Tarkoittaako tämä, että meidän on luotava kahdeksan erilaista objektia vohvelikokoelmallemme?

Jos lisäämme banaaneja potentiaalisten lisäosien luetteloomme, on 16 erilaista yhdistelmää [2].

On itsestään selvää, että yhden kerroksen lisääminen toppilistaan ​​aiheuttaa räjähdyksen vohvelikokoelmassamme.

Ei ole mahdollista luoda erilaista vohvelikalua jokaiselle mahdolliselle yhdistelmän yhdistelmälle. Tämän on oltava parempi tapa.

Entä jos, kun haluamme StrawberryWafflen, sen sijaan, että luodaan StrawberryWaffle, luomme vohvelin ja lisäämme siihen mansikoita?

Entä StrawberryBlueberryWaffle?

Voimme luoda vohvelin, lisätä siihen mansikoita ja lisätä mustikoita siihen!

Vohveliluokkien luominen

Katsotaanpa tavallista vohvelilajia:

Voit luoda vohvelin, palvella sen ja syödä sen seuraavasti:

Ja tässä on StrawberryWaffle-luokka:

Huomaa, että ohitamme vohvelikoko StrawberryWaffle-konstruktorin sisällä StrawberryWafflen luomiseksi.

StrawberryWaffle -luokalla on:

  1. Läpäissyt vohveli
  2. Mansikat täydentävänä
  3. Palvelumenetelmä, joka kutsuu läpikäyneen vohvelin tarjousmenetelmäksi. Sitten tulosteita mansikoiden päällä
  4. Syömismenetelmä, joka kutsuu läpikäytetyn vohvelin syömismenetelmää ja tulostaa ja syö sitten mansikoita

Voit luoda mansikkavohvelin, palvella sen ja syö sen seuraavasti:

Tässä ovat BlueberryWaffle- ja BlackberryWaffle-luokat:

Ja voit käyttää niitä näin:

Vedä yhteinen osa ulos

Huomaa StrawberryWaffle -luokka, BlueberryWaffle-luokka ja BlackberryWaffle-luokka ovat melkein identtiset paitsi niiden päällekkäisyydellä, jotta voimme vetää yhteiset osat vanhemmiksi luokiksi.

WaffleDecoratorissa yläosa ei ole enää objektin ominaisuus. Sen sijaan se on menetelmä, jonka lastenluokka voi ohittaa.

Nyt voimme kirjoittaa StrawberryWaffle, BlueberryWaffle ja BlackberryWaffle uudelleen periäksesi WaffleDecoratorin saadakseen nämä yleiset toiminnot:

Ja heidän tulisi silti toimia samalla tavalla kuin ennen:

Tässä ovat luolamme luokat:

Luominen BlueberryStrawberry -vohveli

Nyt meillä on Waffle, StrawberryWaffle, BlueberryWaffle ja BlackberryWaffle.

On aika saavuttaa tavoite, jonka alun perin asetimme:

Luo vohveli, lisää siihen mansikoita ja lisää mustikoita siihen.

Juuri näin:

Ja voimme:

Mitä tapahtuu?!

Katsotaanpa tarkemmin, kuinka olemme luoneet mustikka_rawberry_waffle:

Ensin loimme plain_wafflen Wafflen kanssa: plain_waffle = Waffle.new

Sitten loimme mansikka_vohveli kuljettamalla plain_waffle StrawberryWaffle-rakentajaan. strawberry_waffle = StrawberryWaffle.new (tavallinen_vahvike)

On syytä huomata, että luomalla mansikka_vohvelia, pidämme läpäissyt yksinkertainen_vohveli mansikan_vohvelin esiintymämuuttujana:

Kuten näemme, mansikka_vahvike.vohveli ja tavallinen_vohveli ovat samaa kohdetta:

Tässä vaiheessa, kun kutsumme strawberry_waffle.serve. Soitamme ensin plain_waffle.serve ja tulostamme sitten mansikoiden päällä.

Meille mansikka_waffle.eat, soitamme ensin plain_waffle.eat, tulostamme ja syömme sitten mansikoita.

Luomme blueberry_strawberry_waffle ohittamalla strawberry_waffleinto BlueberryWaffle-rakentajalle. blueberry_strawberry_waffle = BlueberryStrawberryWaffle.new (mansikka_vahvike)

Kun luot blueberry_strawberry_waffle, pidämme siirrettyä mansikka_vafflea mustikka_strawberry_wafflen esiintymämuuttujana:

Kun soitamme blueberry_strawberry_waffle.serve, kutsumme ensin strawberry_waffle.serve. Mikä kutsuu plain_waffle.serve, sen jälkeen tulostetaan mansikoiden päällä. Tulosta sitten mustikoiden päällä.

Kun soitamme blueberry_strawberry_waffle.eat, kutsumme ensin strawberry_waffle.eat. Joka kutsuu plain_waffle.eat, tulostaa ja syö sitten mansikoita. Sitten tulosta ja syö sitten mustikoita.

Taikuuden avain:

strawberry_waffle on rakennettu tavallisen vohvelin päälle. Ja blueberry_strawberry_waffle on rakennettu strawberry_wafflen päälle.

Avain kykyyn rakentaa vohveleita päällekkäin on, että kaikkien vohveleiden on noudatettava samaa käyttöliittymää.

Kaikilla vohveleilla on tarjoilu- ja syömismenetelmä.

Siksi StrawberryWaffle- / BlueberryWaffle- / BlackberryWaffleclass-luokissa olemme vakuuttuneita siitä, että läpikäytetyssä vohvelissa on tarjoilumenetelmä ja syömismenetelmä.

Ja voimme hyödyntää tarjoilumenetelmää ja syömismenetelmää kuluneesta vohvelista määritteleessäsi uuden tarjoilumenetelmän ja uuden syömismenetelmän.

WaffleDecorator ei välitä sellaisesta vohvelista. Se voi olla tavallinen vohveli, mansikkavaahto tai muukalainen vohveli.

Tärkeää on, että WaffleDecorator ottaa vohvelin ja palauttaa parannetun vohvelin. Se vohveli, jonka se tarvitsee, ja sen palauttama vohveli, noudattavat samaa rajapintaa.

Koska kaikki koristeluvälineet, jotka ottavat ja palauttavat vohvelit, noudattavat samaa käyttöliittymää, sisustajan tulos voidaan siirtää toiseen sisustajaan.

Juuri näin:

tai tämä:

Voimme nyt luoda Wafflen, StrawberryWafflen, BlueberryWafflen ja BlackberryWafflen avulla kaikki kahdeksan erilaista vohvelia.

Banaanin lisääminen listalle on yhtä helppoa kuin:

Olet juuri oppinut sisustusmallin!

Tässä on sen määritelmä:

Sisustaja asettaa lisävastuut objektiin dynaamisesti.

takeaways:

  1. Sisustussuunnittelijamalli tarkoittaa lisäominaisuuksien lisäämistä olemassa olevaan esineeseen helposti.
  2. Koristettavan esineen (joka siirretään kaikille sisustajille) ja sisustajien palauttamien esineiden on oltava saman käyttöliittymän mukaisia.

Kiitos lukemisesta! Toivottavasti nautit artikkelista.

Julistan sihui.io: ​​lle viikossa.

Tilaa niin, että et unohda sarjan seuraavaa artikkelia.

Seuraavan kerran katsotaan seuraavaa:

[1] PlainWaffle, StrawberryWaffle, Mustikkavahvike, BlackberryWaffle, MansikkaBlueberryWaffle, MansikkaBlackberryWaffle, MustikkaBlackberryWaffle ja MansikkaBlueberryBlackberryWaffle.

[2] C (4, 0) + C (4, 1) + C (4, 2) + C (4, 3) + C (4, 4) = 16