1 / 12

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

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

chico
Download Presentation

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

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. Μεθοδολογίες Προγραμματισμού ΙΙ ΣΧΕΔΙΑΣΤΙΚΑΠΡΟΤΥΠΑ (2) ΕΦΑΡΜΟΓΕΣ Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr

  2. Factory Method (Εργοστάσιο) (1/5) Παράδειγμα 1ο :Υλοποίηση με Concrete Factor (-Creator) interface Product { } class ConcreteProduct implements Product { } //factory abstract class Creator{ public void anOperation(){Product product = factoryMethod();} protected abstract Product factoryMethod();} class ConcreteCreator extends Creator{ protected Product factoryMethod() {System.out.println("H klasiConcreteProductthaylopoihsei to stygmiotypo"); return new ConcreteProduct();}} class Client { public static void main( String arg[] ) { Creator creator = new ConcreteCreator(); creator.anOperation();}} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  3. Factory Method (Εργοστάσιο) (2/5) Παράδειγμα 2ο Στο παράδειγμα αυτό το ProductBθα αντιστρέφει το όνομα που εισάγεται. Το ProductΑ απλώς καλείται… abstract class Product { public void writeName(String name) {System.out.println("To onomaeinai: "+name);}} class ProductA extends Product { } class ProductB extends Product { public void writeName(String name) { StringBuildertempName = new StringBuilder().append(name); System.out.println("To antistrofotouonomatoseinai: " + tempName.reverse());}} class ProductFactory { Product createProduct(String type) { if(type.equals("B")) return new ProductB(); else return new ProductA();}} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  4. Factory Method (Εργοστάσιο) (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"); } } Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  5. Factory Method (Εργοστάσιο) (4/5) Παράδειγμα 3ο Στο παράδειγμα αυτό θα δημιουργούμε στιγμιότυπα διαφορετικών τύπων σκύλων, ανάλογα με κριτήρια που δίνουμε…. interface Dog {public void ratsa ();} class Poodle implements Dog { public void ratsa() {System.out.println("H ratsatouskyloyeinai: Poodle"); }} class Rottweiler implements Dog { public void ratsa() {System.out.println("H ratsatouskyloyeinai: Rottweiler"); }} class SiberianHusky implements Dog { public void ratsa() {System.out.println("H ratsatouskyloyeinai: 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; }} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  6. Factory Method (Εργοστάσιο) (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(); }} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  7. Abstract Factory(Αφηρημένο Εργοστάσιο) (1/3) Παράδειγμα: Δημιουργία buttons – τύπου Windows ή Mac. Το αποτέλεσμα θα είναι ένα από τα δύο κουμπιά ανάλογα την παράμετρο που δίνουμε. Ο πελάτης (Application) δεν γνωρίζει ποιο GUIFactory δίνεται και ακόμη ποιο κουμπί θα δημιουργηθεί. Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  8. Abstract Factory(Αφηρημένο Εργοστάσιο) (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 koumpieinaitypoy: WinButton"); }} class MacButton implements Button { public void paint() { System.out.println("to koumpieinaitypoy: MacButton"); }} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  9. Abstract Factory(Αφηρημένο Εργοστάσιο) (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(); }}} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  10. Template Method (Μέθοδος Υπόδειγμα) (1/3) Παράδειγμα: Διαφορετικές υλοποιήσεις μεθόδων σε διαφορετικά φαγητά… abstract class Meal { // template method public 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(); } Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  11. Template Method (Μέθοδος Υπόδειγμα) (2/3) class FrikaseMeal extends Meal { //Overridetis 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 { //Overridetis 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");}} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

  12. Template Method (Μέθοδος Υπόδειγμα) (3/3) public class Demo { public static void main(String[] args) { Meal meal1 = new FrikaseMeal(); meal1.doMeal(); System.out.println(); Meal meal2 = new PsitiSardelaMeal(); meal2.doMeal(); }} Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

More Related