Upload
buidien
View
215
Download
0
Embed Size (px)
Citation preview
Sisältö
• Tarkkailija• Strategia• Rekursiokooste• Tehdas-metodi• MVC
Tarkkailija suunnittelumalli
Tarkkailijamalli (Observer)• Määrittelee olioiden välille yksi moneen
riippuvuuden siten, että kun yhden olion tilamuuttuu, siitä riippuvat oliot saavat ilmoituksenja päivittyvät automaattisesti
Tarkkailijamalli (Observer)
UI
Data
UI
Data
View1
Data
View2 View3
Tarkkailija (Observer)
• LuokkaRakenne
Subject
+ Attach()+ Detach()+ Notify()
ConcreteSubject- subjectState+ GetState()+ SetState()
Observer
+ Update()
ConreteObserver- observerState+ Update()
observerState =subject->GetState()
for all o in observers { o->update()
}
return subjectState
subject
observers
Tarkkailija (Observer)
• Observeri rekisteröityy kuuntelemaanmallia
Tarkkailija (Observer)
• Kutsuminen
Tarkkailija (Observer)
• Rekisteröinnin peruminen
Tarkkailija (Observer)
• .NET– eventtien avulla
• Java– Rajapintojen avulla– Observer, Observable
.NET observer
public class Subject{
private string data = "";public event EventHandler Changed;
public string Data{
get { return data; }set {
data = value;// Informoidaan tarkkailijoitaOnChanged(new EventArgs());
}}
}
public class GUI{
public void GUI(Subject s){
s.Changed += newEventHandler(update);
}
public void update(object source,EventArgs e)
{MessageBox.Show(s.Data);
}}
Java observer
public class Subject extends Observable{
private String data = "";
public String getData(){
return data;}public void setData(String d){
data = d;setChanged();notifyObservers();
}}
public class GUI implements Observer{
public void GUI(Subject s){
s.addObserver(this);}
public void update(Observable o,Object arg)
{String data = s.getData();
}}
Strategia suunnittelumalli
Strategia-suunnittelumalli
• Määrittelee algoritmiperheen, kapseloikunkin algoritmin ja tekee niistäkeskenään vaihdettavia. Algoritmiavoidaan muuttaa muuttamatta sovellusta,joka sitä käyttää
Strategia-suunnittelumalli
• Käyttö GUI-ohjelmoinnissa– Käytetään mm. valintaikkunoiden yhteydessä
varmistamaan, että käyttäjä syöttääoikeanmallista tietoa. Esim. vaaditaan, ettänumeerinen tekstikenttä hyväksyy vainnumeroita.
Strategia-suunnittelumalli
• Luokkarakenne
Context
+ ContextInterface()
ConcreteStrategyA
+ AlgorithmInterface()
ConcreteStrategyC
+ AlgorithmInterface()
ConcreteStrategyB
+ AlgorithmInterface()
Strategy
+ AlgorithmInterface()
strategy
Esimerkki(Java Swing borders)
Esimerkki(Java Swing borders)
Example 1. The wrong way to paint Swing borders
// A hypothetical JComponent.paintBorder method
protected void paintBorder(Graphics g) {switch(getBorderType()) {
case LINE_BORDER: paintLineBorder(g);break;
case ETCHED_BORDER: paintEtchedBorder(g);break;
case TITLED_BORDER: paintTitledBorder(g);break;
...}
}
Esimerkki(Java Swing borders)
JComponent
setBorder()
JBorder
paintBorder()
Esimerkki(Java Swing borders)
Example 2. The right way to paint Swing borders
// The actual implementation of the JComponent.paintBorder() methodprotected void paintBorder(Graphics g) {
Border border = getBorder();
if (border != null) {border.paintBorder(this, g, 0, 0, getWidth(), getHeight());
}}
Esimerkki(Java Swing borders)
Example 3. Setter and getter methods for a Swing component's border
...private Border border;...public void setBorder(Border border) {
Border oldBorder = this.border;
this.border = border;firePropertyChange("border", oldBorder, border);
if (border != oldBorder) {if (border == null || oldBorder == null || !(border.getBorderInsets(this).
equals(oldBorder.getBorderInsets(this)))) {revalidate();
}repaint();
}}...public Border getBorder() {
return border;}
Rekursiokooste
Rekursiokooste (Composite)
• Malli esittää oliot rekursiivisestikoostettuna puurakenteena. Yksittäisiäolioita ja oliokoosteita voidaan käsitelläsamalla tavalla
Rekursiokooste (Composite)
• LuokkarakenneComponent
+ Operation()+ AddGraphic()+ Remove()+ GetChild(in ind:int)
Composite
+ Operation()+ Add()+ Remove()+ GetChild()
Leaf
+ Operation()
Rekursiokooste (Composite)
• Käyttö GUI-ohjelmoinnissa– Grafiikkasovellukset– Käyttöliittymäikkunoiden yhteydessä
Tehdas metodi
Tehdas metodi (factory method)
UML class diagram
Tehdasmetodi• Käyttö GUI-ohjelmoinnissa
– UI-komponenttien luonti
Object* createLabel(string text){
Object* pObject = new Label();if(pObject){
pObject->setText(text);pObject->setEnabled(true);pObject->setVisible(true);
}return pObject;
}
M
V
C
MVC
MVC
• Model – View – Controller
MVC
MVC
MVC:n edut
1. Selkeä rakenne2. Laajennettavuus3. Modulaarisuus4. Tuki hajautukselle
Model
• Irroittaakäyttöliittymän jadatan
• HyödyntääTarkkailija-suunnittelumallia
View
• Esittää datan käyttäjälle• Näkymät voivat olla sisäkkäisiä
– Voi hyödyntää toteutuksessaanRekursiokooste (Composite) suunnittelumallia
– Esim painonapeista koostuva kontrollipaneeli
Controller
• Käsittelee käyttäjän syötteet• Vaihtamalla kontrolleria on mahdollista
ohjelman ajon aikana muuttaa tapaa, jollaohjelma reagoi käyttäjän syötteeseen– Esim. asetetaan kontrolleriksi tyhjä toteutus,
jolloin näkymä ei reagoi käytäjän syötteisiin• Voi hyödyntää Strategia-suunnittelumallia
Lähteitä• Observer design pattern
– http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/observerpattern.asp
– http://en.wikipedia.org/wiki/Observer_pattern• Abstract factory
– http://www.exciton.cs.rice.edu/JavaResources/DesignPatterns/FactoryPattern.htm
– http://en.wikipedia.org/wiki/Abstract_factory_pattern– http://www.c-
sharpcorner.com/Language/AbstractFactoryPatternsinCSRVS.asp
– http://www.c-sharpcorner.com/Code/2003/Jan/AbstractPattern.asp
Lähteitä
• Strategy design pattern– http://www.exciton.cs.rice.edu/JavaResources/Design
Patterns/StrategyPattern.htm– http://www.javaworld.com/javaworld/jw-04-2002/jw-
0426-designpatterns.html• MVC
– http://ootips.org/mvc-pattern.html– http://st-www.cs.uiuc.edu/users/smarch/st-
docs/mvc.html– http://en.wikipedia.org/wiki/Model_view_controller