Olkoon luokka Auto vaikka seuraavanlainen:
class Auto
{
String merkki;
String rekkari;
int bensaa;
Rekisteriote rekisteriote;
...
}
Mutta jos halutaankin toteuttaa luokka Auto niin, että sen sijaan että määritellään jokainen jäsenmuuttuja luokan sisälle, tehdäänkin esim näin
class Auto
{
Hashmap arvot;
}
Eli nyt Autoon voi lisätä mielivaltaisesti erilaisia "muuttujia" lisäämällä tuohon hashmappiin eri avaimia arvoineen.
Auto auto = new Auto();
auto.arvot.add("merkki", "bmw");
auto.arvot.add("rekkari", "AAA-123");
...
Mistä suunnittelumallista tässä on oikein kyse? Toivottavasti joku ymmärsi...
class Auto
{
String merkki;
String rekkari;
int bensaa;
Rekisteriote rekisteriote;
...
}
Mutta jos halutaankin toteuttaa luokka Auto niin, että sen sijaan että määritellään jokainen jäsenmuuttuja luokan sisälle, tehdäänkin esim näin
class Auto
{
Hashmap arvot;
}
Eli nyt Autoon voi lisätä mielivaltaisesti erilaisia "muuttujia" lisäämällä tuohon hashmappiin eri avaimia arvoineen.
Auto auto = new Auto();
auto.arvot.add("merkki", "bmw");
auto.arvot.add("rekkari", "AAA-123");
...
Mistä suunnittelumallista tässä on oikein kyse? Toivottavasti joku ymmärsi...
Vastaukset 4
Vanhimmat
Kyseessä on Flyweight suunnittelu malli (http://en.wikipedia.org/wiki/Flyweight_pattern).
Hieman jäi vaivaamaan tuo, mitä hait maininnalla mielivaltaisesta lisäämisestä... Eli liittyikö se varsinaiseen kysymykseen...
hashmap (tiedontalletusrakenne joka on verrannollinen linkitettyyn listaan, binary tree ym). Katso vaikka wikipediasta yksityiskohtia.
Hashmapin idea on että sillä voi nopeasti etsiä suuresta taulukosta (ominaisuus, arvo) jakamalla aineiston osioiksi jonkun kriterin mukaan. Muodostetaan hashkoodi jonka avulla voidaan "suoraan" hypätä taulukon oikeaan kohtaan. Tavallisesti suuret tietokannat (>10000 arvoa) käyttävät yhdistelmää hashmap- binary tree. Pienillä tietomäärillä suora haku taulukosta (tai linkitetystä listasta) on nopeampi ja selkeämpi.
En itse puhuisi mistään "suunnittelumallista". Kyseesssä on tavanomainen tiedontalletusrakenne, ei mitään muuta.
Extensibility pattern? Sillä voi helposti laajentaa sitä tiedon määrää siellä luokan sisällä myöhemmin keksimällä lisää kenttiä.
Onko pattern ollenkaan? Tarvitaanko tuota tai onko tuo hyvä idea? En minä vaan tiedä.
Itse asiassa joissakin dynaamisissa kielissä oliot on jo toteutettu oletuksellisti tuota muistuttavalla tavalla...