1 / 8

Strategy Pattern

Strategy Pattern. Beslektede algoritmer. Isolere klient fra algoritme. Klienter trenger av og til helt forskjellige måter å gjøre det samme på Men klienten selv kan ikke inneholde kode for alle mulige varianter I stedet lages det noen få kontraktmetoder i interface eller abstrakte klasser

lunea-mayo
Download Presentation

Strategy Pattern

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. StrategyPattern Beslektede algoritmer

  2. Isolere klient fra algoritme • Klienter trenger av og til helt forskjellige måter å gjøre det samme på • Men klienten selv kan ikke inneholde kode for alle mulige varianter • I stedet lages det noen få kontraktmetoder i interface eller abstrakte klasser • Dermed kan en instans som kapsler inn en algoritme sendes som argument til klienten • Klienten bruker den innkapslede algoritmen uten å måtte kjenne den konkrete strategien

  3. Prinsippskisse • Klienten skal utføre ulike service-operasjoner • Klienten har aggregert eller komponert et strategiobjekt som vet hvordan

  4. Eksempelskisse • GoF bruker dette eksemplet på side 315 • Det handler om ulike strategier for linjeskift • Composition implementerer ikke strategiene selv • Mønsteret minner derfor om Decorator • Forskjellen på mønstre er av og til bestemt av hensikten med mønsteret

  5. Instans av strategypattern • Prosjektet simpletransport bruker Strategy • Et eksempel med formatering vises på side 118 • Spesialiseringer av DefaultTableCellRenderer gir ulike strategier • Installering av strategiobjektet forstås ved hjelp av MVC • Contexter TableColumn komponert i TableColumnModel • Strategien installeres med meldingen setCellRenderer

  6. setValue som kontraktmetode • Kontraktmetoden er definert i DefaultTableRenderer • Kontrakten er at domeneklassene kan overstyre metoden • Kontekstobjektet er altså en klasse i rammeverket • Domeneklassen Listpane er klient for kontekstobjektet • Kontekstobjektet tilhører MVC-gruppen i rammeverkets brukerkontroll • Det er altså rammeverkets brukerkontroll som bruker kontraktmetoden setValue

  7. GoFsApplicability list • Flere klasser med lignende ansvar er kun forskjellig i oppførsel (behaviour) • Det er behov for ulike varianter av en algoritme som kan implementeres i et klassehierarki • Klientene kjenner ikke datasettene eller algoritmene som utnyttes i strategiobjektene • Klasser som definerer ulike algoritmer og forgreninger basert på switch- eller lister med if-else får høy kompleksitet og blir vanskelige å vedlikeholde. Flytt hver gren inn i hver sin strategiklasse i stedet

  8. Referanser til prosjekter • simpletransportbruker Strategy for å formatere ulike lister. Se programkode 71 og 72. • Alle prosjektene bruker Strategi som layoutobjekter i paneler eller i spesialiseringer av Jframe, som nevnt blant annet i prosjekt 4, side 55. • easylibbruker Strategy i overføring av data mellom properties og XML, se side 96 • simplediagram bruker Strategy for å fremstille sammensatte figurer basert på Graphics2D, interfacet Shape og metoden draw, se side 147

More Related