450 likes | 557 Views
2/2001. Tietojärjestelmät ja Systeemisuunnittelu 010557001. Luennoitsija: Tapio Lammi e-mail: tapi@iki.fi. Suunnittelumallit (Design Patterns). Suunnittelumallit ovat valmiita ratkaisumalleja teityntyyppisiin usein toistuviin ongelmiin Tavoitteena:
E N D
2/2001 Tietojärjestelmät ja Systeemisuunnittelu 010557001 Luennoitsija: Tapio Lammi e-mail: tapi@iki.fi
Suunnittelumallit ovat valmiita ratkaisumalleja teityntyyppisiin usein toistuviin ongelmiin Tavoitteena: Tarjota luettelo valmiista ratkaisuista ongelmatilanteisiin Yhtenäistää suunnittelukäytäntöjä Tarjota yhtenäinen käsitteistö toteutustavoille Suunnittelumallit
Suunnittelumallit • Suunnittelumallit voidaan jakaa kolmeen eri ryhmään: • Olion luontia kontrolloivat mallit • Olioiden rakennetta ja rajapintoja kontrolloivat mallit • Olioiden käyttäytymistä kontrolloivat mallit
Abstract Factory - Toteutusmalli rajapinnalle jolla luodaan samaan ryhmään kuuluvia olioita, ilman että niiden varsinaisesta luokasta on tietoa. Builder - Mahdollistaa samalaisen luontiprosessin eri tyyppisille olioille Factory Method - tarjoaa rajapinnan olion luomiselle, mutta jättää aliluokkien tehtäväksi päättää lopullinen olion luokka Prototype - Mahdollistaa uuden olion luonnin kopioimalla sen ominaisuudet jo valmiista oliosta Singleton - Varmistaa että luokasta on olemassa ainoastaan yksi olio, ja tarjoaa sille sovelluksenlaajuisen luontirajapinnan Olion luontia kontrolloivat mallit
Abstract Factory on käyttökelpoinen kun: Järjestelmän toteutuksessa käytettävät työkalut ja 3. Osapuolen tuotteet saattavat vaihtua Järjestelmän tulee olla konfiguroitavissa erilaisiin ympäristöihin Tietyntyyppiset olion on sidottava toimimaan yhdessä Toteutetaan työkalukirjastoa josta julkaistaan ainoastaan rajapinta Abstract Factory
AbstractFactory - Määrittelee olioiden luontiin käytetyn rajapinnan ConcreteFactory - Toteuttaa olion luontiin liittyvät varsinaiset operaatiot AbstractProduct - Määrittelee olion rajapinnan ConcreteProduct - Toteuttaa olion operaatiot jotka on määritelty AbstractProduct rajapinnassa Client - Käyttää ainoastaan AbstractFactory- ja AbstractProduct rajapinnan operaatioita AbstractFactory - komponentit
Builder mallia käytetään kun: järjestelmän täytyy mahdollistaa monimutkaisten olioiden luonnin ilman tietoa kaikista olion osista ja niiden luonnista Luontiprosessin täytyy mahdollista eri rajapinnat luotavalle oliolle Builder
Builder - Tarjoaa rajapinnan Product-olioiden luonnille ConcreteBuilder - Toteuttaa Builder-olion määrittämän rajapinnan olioiden luonnille ja tarjoaa rajapinnan luodun Product-olion käsittelylle Director - Luo oliot käyttäen Builder-rajapintaa Product - Luotava olio. Sisältää toteutettavien operaatioiden implementatiot ja luokkarakenteet Builder - Komponentit
Builder - esimerkki Builders
Factory Method on käyttökelpoinen kun: Luokka ei voi ottaa kantaa luomaansa olioon Luokka haluaa aliluokkiensa määrittelvän luotavan olion (impelementaatio ja rajapinta erotettu toisistaan) Factory Method
Protype mallia voidaan käyttää kun: Luotavat oliot ladataan dynaamisesti ajon aikana Halutaan välttää monikerroksiset Factory-hierarkiat Kun luotavat oliot ovat tilallisia, ja halutaan automatisoida olion tilan asetus sen sijaan että se tehtäisiin joka kerta käsin. Prototype
Prototype - Määrittää rajapinnan olion kopioinnille ConcretePrototype - Toteuttaa kopiointirajapinnan toiminnallisuuden Client - Luo uuden olion pyytämällä prototyyppiä kopioimaan itsensä Prototype - Komponentit
Singleton mallia voidaan käyttää kun: Luokasta saa olla sovelluksessa käytössä vain ja ainoastaan yksi olio ja tälle oliolle halutaan sovelluksen laajuinen rajapinta Kun luokkaa jolla on vain yksi instanssi, pitää voida laajentaa periyttämällä, eikä luokan palveluita käyttävään koodiin haluta tehdä muutoksia Singleton
Singleton: Tarjoaa metodin, jolla olio palauttaa ainoan sovellukessa olevan instanssin itsestään Huolehtii itse olion luonnista ja sen käytön kirjanpidosta Singleton - Komponentit
Adapter - Kuorruttaa olion rajapinnan oliota käyttävien järjestelmän osien muotoon Bridge - Erottaa rajapinnan ja toteutuksen toisistaan niin, että molempia voidaan vaihtaa Composite - Mahdollistaa olioiden hierarkisen toteutuksen niin, että kutakin oliopuuta voidaan käsitellä yhtenä oliona Decorator - Mahdollistaa lisätoiminnallisuuksien lisäämisen olioon Façade - Tarjoaa yhtenäisen rajapinnan alijärjestelmän tarjoamille toiminnallisuuksille Flyweight - Mahdollistaa luotujen olioiden jakamisen järjestelmän osien kesken Proxy - Tarjoaa välirajapinnan jolla olion käyttöä voidaan kontrolloida Rakenteelliset Mallit
Adapter-mallia käytetään kun: Olion tarjoama rajapinta ei vastaa tarvittua rajapintaa Rakennetaan uudelleenkäytettäviä komponentteja joissa käytetyt luokkahierarkiat saattavat vaihdella työkaluista riippuen Järjestelmässä käytetään useita aliluokkia, mutta on epäkäytännöllistä sovittaa niitä rajapintaan periyttämällä Adapter
Target - Määrittelee sovelluskohtaisen rajapinnan jota Client käyttää Client - käyttää toiminnassaan Target-rajapintaa Adaptee - Toteuttaa rajapinnan joka on sovitettava Target rajapintaan Adapter - Sovittaa Adaptee rajapinnan Target rajapintaan Adapter - Komponentit
Bridge-mallia käytetään kun: Halutaan välttää sidonta olion toteutuksen ja sen tarjoaman rajapinnan välillä Sekä rajapinnan että toteutuksen on oltava perittävissä olevia Toteutuksen vaihdon on oltava läpinäkyvä sitä käyttäville järjestelmän osille Halutaan jakaa olio useiden järjestelmänosien kesken ja toteuttaa esimerkiksi reference-counting kirjanpito niiden käytöstä Bridge
Abstraction - Tarjoaa ulkoisen rajapinnan olion palveluun ja ylläpitää viitettä olion implementaatioon RefinedAbstraction - Laajentaa Abstraction rajapinnan toiminnallisuuksia Implementor - Määrittelee olion toteutuksen rajapinnan ConcreteImplementor - Toteuttaa olion tarjoaman toiminnallisuuden Bridge - Komponentit
Composite mallia käytetään kun: Halutaan yksi access-piste joukolle samankaltaisia olioita Halutaan piilottaa palvelun käyttäjältä olioiden välinen hierarkinenr rakenne Composite
Component - Määrittelee rajapinnan hierarkian olioille, määrittelee oletustoteutuksen, sekä määrittelee rajapinnan lapsiolioiden käytölle Leaf - Toteuttaa olion, joka ei voi enää koostua muista Component olioista Composite - Määrittelee tominnallisuuden koosteolioille, säilyttää lapsikomponentit, sekä toteuttaa lasten käsittelyt Client - Käyttää olioiden palveluite Component rajapinnan kautta Composite - Komponentit
Decorator mallia käytetään kun: Halutaan lisätä olion toiminnallisuutta ilman että muutetaan sen toteutusta Vähentämään periyttämisen tarvetta suurissa järjestelmissä Toteuttamaan ominaisuuksia joista voidaan myöhemmin haluta luopua Decorator
Component - Määrittelee rajapinnan olioille joille voidaan lisätä ominaisuuksia ConcreteComponent - Olio, johon voidaan lisätä ominaisuuksia Decorator - Säilyttää viitteen Component-tason olioon ja toteuttaa sen rajapinnan ConcreteDecorator - Lisää toiminnallisuuksia Component - olioon Decorator - Komponentit
Façade mallia käytetään kun: Halutaan yksinkertainen rajapinta monimutkaisiin operaatioihin Halutaan vähentää eri alijärjestelmiin kuuluvien olioiden riippuvuutta toisistaan Halutaan rakentaa järjestelmä kerroksittain, siten että kukin kerros tarjoaa tietyn rajapinnan ulospäin Facade
Façade - Rakenne Alijärjestelmä
Façade - Tuntee alijärjestelmän rakenteen ja ohjaa palvelukutsut kulloinkin oikealla oliolle Alijärjestelmän luokat: Toteuttavat alijärjestelmän toiminnallisuuden Ottavat palvelupyynnöt vastaan Façade oliolta Eivät ole riippuvaisia Façade oliosta Façade - Komponentit
Flyweight mallia käytetään kun: Järjestelmä koostuu suuresta määrästä olioita Olioiden määrää pienentämällä voidaan pienentää resurssikulutusta Oliot ovat tilattomia Ohjelman toiminta ei ole riippuvainen olion identiteetistä FlyWeight
Flyweight - Määrittelee rajapinnan jonka oliot tarjoavat muille järjestelmän osille ConcreteFlyweight - Toteuttaa Flyweight rajapinnan jaetuille olioille UnsharedConcreteFlyweight - Toteuttaa rajapinnan aliluokille joita ei voi jakaa Flyweight Factory - Luo Flyweight oliot ja pitää niistä kirjaa Client - Käyttää jaettuja Flyweight olioita ja hakee ne Flyweight Factoryltä FlyWeight - Komponentit
Proxy-Mallia käytetään kun: Halutaan tarjota paikallinen rajapinta toisessa järjestelmässä olevaan olioon (remote Proxy) Kun halutaan luoda raskaat oliot vasta ajon aikana tarvittaessa (virtual Proxy) Kun halutaan kontrolloida olioiden palvelun käyttöä (protection Proxy) Kun halutaan toteuttaa kuorman jakoa tai vikasietoisuutta (smart Proxy) Proxy
Proxy: Pitää yllä viitettä palvelun toiminnallisuuden toteuttavaan olioon Tarjoaa varsinaisen olion kanssa identtisen rajapinnan Kontrolloi varsinaisen olion palveluiden käyttöä Subject - Määrittelee rajapinnan jonka palvelu toteuttaaa RealSubject - Toteuttaa varsinaisen palvelun toiminnallisuuden Proxy - Komponentit