Upload
chico
View
68
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
Μεθοδολογίες Προγραμματισμού ΙΙΜεθοδολογίες Προγραμματισμού ΙΙ
ΣΧΕΔΙΑΣΤΙΚΑΣΧΕΔΙΑΣΤΙΚΑ ΠΡΟΤΥΠΑ (2)ΠΡΟΤΥΠΑ (2)ΕΦΑΡΜΟΓΕΣΕΦΑΡΜΟΓΕΣ
Παναγιώτης Σφέτσος, PhDhttp://aetos.it.teithe.gr/~sfetsos/
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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();}}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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();}}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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"); }}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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; }}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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(); }}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7
Abstract FactoryAbstract Factory ((Αφηρημένο Εργοστάσιο) (1/3) Αφηρημένο Εργοστάσιο) (1/3)
ΠαράδειγμαΠαράδειγμα::Δημιουργία buttons – τύπου Windows ή Mac. Το αποτέλεσμα θα είναι ένα από τα δύο κουμπιά ανάλογα την παράμετρο που δίνουμε. Ο πελάτης (Application) δεν γνωρίζει ποιο GUIFactory δίνεται και ακόμη ποιο κουμπί θα δημιουργηθεί.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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"); }}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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(); }}}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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();}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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");}}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 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(); }}