12
Μεθοδολογίες Προγραμματισμού ΙΙ Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ ΕΦΑΡΜΟΓΕΣ Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ [email protected]

Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

  • Upload
    chico

  • View
    69

  • Download
    3

Embed Size (px)

DESCRIPTION

Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ. Παναγιώτης Σφέτσος , PhD http://aetos.it.teithe.gr/~sfetsos/ [email protected]. Factory Method ( Εργοστάσιο) (1/5). Παράδειγμα 1 ο : Υλοποίηση με Concrete Factor (- Creator) interface Product { } - PowerPoint PPT Presentation

Citation preview

Page 1: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Μεθοδολογίες Προγραμματισμού ΙΙΜεθοδολογίες Προγραμματισμού ΙΙ

ΣΧΕΔΙΑΣΤΙΚΑΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2)ΠΡΟΤΥΠΑ (2)ΕΦΑΡΜΟΓΕΣΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, PhDhttp://aetos.it.teithe.gr/~sfetsos/

[email protected]

Page 2: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 2

Factory Method (Factory Method (Εργοστάσιο) (1/5) Εργοστάσιο) (1/5) Παράδειγμα 1ο : Υλοποίηση με Υλοποίηση με Concrete Factor (-Concrete Factor (- Creator)Creator)

interface Product { }class ConcreteProduct implements Product { }//factoryabstract class Creator { public void anOperation(){Product product = factoryMethod();} protected abstract Product factoryMethod(); }

class ConcreteCreator extends Creator { protected Product factoryMethod() {System.out.println("H klasi ConcreteProduct tha ylopoihsei to stygmiotypo"); return new ConcreteProduct(); }}

class Client { public static void main( String arg[] ) { Creator creator = new ConcreteCreator(); creator.anOperation();}}

Page 3: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 3

Factory Method (Factory Method (Εργοστάσιο) (2/5) Εργοστάσιο) (2/5) Παράδειγμα 2Παράδειγμα 2οο

Στο παράδειγμα αυτό το ProductB θα αντιστρέφει το όνομα που εισάγεται. Το ProductΑ απλώς καλείται…

abstract class Product { public void writeName(String name) {System.out.println("To onoma einai: "+name);}}

class ProductA extends Product { }

class ProductB extends Product { public void writeName(String name) { StringBuilder tempName = new StringBuilder().append(name); System.out.println("To antistrofo tou onomatos einai: " + tempName.reverse());}}

class ProductFactory { Product createProduct(String type) { if(type.equals("B")) return new ProductB(); else return new ProductA();}}

Page 4: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 4

Factory Method (Factory Method (Εργοστάσιο) (3/5) Εργοστάσιο) (3/5) public class TestClientFactory { public static void main(String[] args) { ProductFactory pf = new ProductFactory(); Product prod; prod = pf.createProduct("A"); prod.writeName("Nikas Nikos"); prod = pf.createProduct("B"); prod.writeName("Nikas Nikos"); }}

Page 5: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 5

Factory Method (Factory Method (Εργοστάσιο) (Εργοστάσιο) (44/5) /5) Παράδειγμα Παράδειγμα 33οο

Στο παράδειγμα αυτό θα δημιουργούμε στιγμιότυπα διαφορετικών τύπων σκύλων, ανάλογα με κριτήρια που δίνουμε….interface Dog {public void ratsa ();}class Poodle implements Dog { public void ratsa() {System.out.println("H ratsa tou skyloy einai: Poodle"); }}class Rottweiler implements Dog { public void ratsa() {System.out.println("H ratsa tou skyloy einai: Rottweiler"); }}class SiberianHusky implements Dog { public void ratsa() {System.out.println("H ratsa tou skyloy einai: Husky"); }} class DogFactory { public static Dog getDog(String criteria) { if ( criteria.equals("A") ) return new Poodle(); else if ( criteria.equals("B") ) return new Rottweiler(); else if ( criteria.equals("C") ) return new SiberianHusky(); return null; }}

Page 6: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 6

Factory Method (Factory Method (Εργοστάσιο) (5/5) Εργοστάσιο) (5/5)

class JavaFactoryPatternExample { public static void main(String[] args) { Dog dog = DogFactory.getDog("A"); dog.ratsa();

dog = DogFactory.getDog("B"); dog.ratsa();

dog = DogFactory.getDog("C"); dog.ratsa(); }}

Page 7: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7

Abstract FactoryAbstract Factory ((Αφηρημένο Εργοστάσιο) (1/3) Αφηρημένο Εργοστάσιο) (1/3)

ΠαράδειγμαΠαράδειγμα::Δημιουργία buttons – τύπου Windows ή Mac. Το αποτέλεσμα θα είναι ένα από τα δύο κουμπιά ανάλογα την παράμετρο που δίνουμε. Ο πελάτης (Application) δεν γνωρίζει ποιο GUIFactory δίνεται και ακόμη ποιο κουμπί θα δημιουργηθεί.

Page 8: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 8

Abstract FactoryAbstract Factory ((Αφηρημένο Εργοστάσιο) (2/3) Αφηρημένο Εργοστάσιο) (2/3)

interface GUIFactory {public Button createButton();}

class WinFactory implements GUIFactory { public Button createButton() { return new WinButton(); }}

class MacFactory implements GUIFactory { public Button createButton() { return new MacButton(); }}

interface Button {public void paint();}

class WinButton implements Button { public void paint() { System.out.println("to koumpi einai typoy: WinButton"); }}

class MacButton implements Button { public void paint() { System.out.println("to koumpi einai typoy: MacButton"); }}

Page 9: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 9

Abstract FactoryAbstract Factory ((Αφηρημένο Εργοστάσιο) (3/3) Αφηρημένο Εργοστάσιο) (3/3)

class Application { public Application(GUIFactory factory){ Button button = factory.createButton(); button.paint(); }}

public class ApplicationRunner { public static void main(String[] args) { new Application(createOsSpecificFactory()); }

public static GUIFactory createOsSpecificFactory() { int typos = 0; if (typos == 0) { return new WinFactory(); } else { return new MacFactory(); }}}

Page 10: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 10

Template Method (Template Method (Μέθοδος Υπόδειγμα) (Μέθοδος Υπόδειγμα) (11//33) )

Παράδειγμα:Διαφορετικές υλοποιήσεις μεθόδων σε διαφορετικά φαγητά…

abstract class Meal {

// template methodpublic final void doMeal() {

prepareIngredients();cook();eat();cleanUp(); }

public abstract void prepareIngredients();

public abstract void cook();

public void eat() {System.out.println("Mmm, poly nostimo...");}

public abstract void cleanUp();}

Page 11: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 11

Template Method (Template Method (Μέθοδος Υπόδειγμα) (2/Μέθοδος Υπόδειγμα) (2/33) )

class FrikaseMeal extends Meal { //Override tis parakatv methodous public void prepareIngredients() {System.out.println("Arnaki, marouli, kremydakia");} public void cook() {System.out.println("Brasimo se hytra h katsarola...");} public void cleanUp() {System.out.println("Plisimo tvn piatvn...");}}

class PsitiSardelaMeal extends Meal { //Override tis parakatv methodous public void prepareIngredients() {System.out.println(“Sardeles me ladi kai lemoni...");} public void cook() {System.out.println("Vazeis tis Sardeles sto tapsi kai tis psineis.....");} public void eat() {System.out.println("Oi psites Sardeles einai poly nostimes...");} public void cleanUp() {System.out.println("Kalo plysimo tvn piatvn");}}

Page 12: Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 12

Template Method (Template Method (Μέθοδος Υπόδειγμα) (Μέθοδος Υπόδειγμα) (33//33) )

public class Demo { public static void main(String[] args) {

Meal meal1 = new FrikaseMeal();meal1.doMeal();

System.out.println();

Meal meal2 = new PsitiSardelaMeal();meal2.doMeal(); }}