Top Banner
10/12/15 1 Design Patterns Design Pattern Definition A named general reusable solution to common design problems Used in Java libraries Major source: GoF book 1995 “Design Patterns: Elements of Reusable Object-Oriented Software” 24 design patterns N. Meng, B. Ryder 2
13

Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

Jul 22, 2018

Download

Documents

lykhanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

1  

Design Patterns

Design Pattern

•  Definition – A named general reusable solution to

common design problems – Used in Java libraries

•  Major source: GoF book 1995 – “Design Patterns: Elements of Reusable

Object-Oriented Software” – 24 design patterns

N.  Meng,  B.  Ryder   2  

Page 2: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

2  

Purpose-based Pattern Classification

•  Creational – About the process of object creation

•  Structural – About composition of classes or objects

•  Behavioral – About how classes or objects interact and

distribute responsibility

N.  Meng,  B.  Ryder   3  

Design pattern space

N.  Meng,  B.  Ryder   4  

Page 3: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

3  

Adapter Pattern

•  Problem: incompatible interfaces •  Solution: create a wrapper that maps

one interface to another – Key point: neither interface has to change

and they execute in decoupled manner

N.  Meng,  B.  Ryder   5  

Example

•  Problem – Client written against some defined

interface – Server with the right functionality but with

a different interface •  Options – Change the client – Change the server – Create an adapter to wrap the server

N.  Meng,  B.  Ryder   6  

Client Abstract Server foo()

ZServer bar(int)

Page 4: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

4  

Example

N.  Meng,  B.  Ryder   7  

Client Abstract Server foo()

Server2 foo()

ZServer bar(int)

Server1 foo()

ZAdapter foo() 1

1

Sample Java Code abstract class AbstractServer { abstract void foo(); } class ZAdapter extends AbstractServer {

private ZServer z; public ZAdapter() { z = new ZServer(); } public void foo() { z.bar(5000); } //wrap call to ZServer method

} … somewhere in client code: AbstractServer s = new ZAdapter();

N.  Meng,  B.  Ryder   8  

Page 5: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

5  

Hierarchy of Adaptees

N.  Meng,  B.  Ryder   9  

Client Abstract Server foo()

Server2 foo()

ZServer bar(int)

Server1 foo()

ZAdapter foo() 1 1

BestZServer bar(int)

BetterZServer bar(int)

Sample Java Code abstract class AbstractServer { abstract void foo(); } class ZAdapter extends AbstractServer {

private ZServer z; public ZAdapter(int perf) { if (perf > 10) z = new BestZServer(); else if (perf > 3) z = new BetterZServer(); else z = new ZServer(); } public void foo() { z.bar(5000); }

}

N.  Meng,  B.  Ryder   10  

Page 6: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

6  

Another Adapter Example

•  Drawing editor: diagrams built with graphical elements

N.  Meng,  B.  Ryder   11  

Editor Shape

boundingBox():Box isEmpty():boolean

PolygonShape boundingBox():Box isEmpty():boolean

LineShape boundingBox():Box isEmpty():boolean

Box bottomLeft:Point topRight:Point

Box(int,int,int,int)

Point x,y: double

Adding TextShape

•  Problem: mismatched interfaces

•  Solution: create a TextShape adapter

N.  Meng,  B.  Ryder   12  

FreeText origin:Point

width,height:double getOrigin():Point getWidth():double getHeight():double isEmpty():boolean

Page 7: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

7  

Sample Java Code class TextShape implements Shape {

private FreeText t; public TextShape() { t = new FreeText(); } public boolean isEmpty() { return t.isEmpty(); } public Box boundingBox() { int x1 = toInt(t.getOrigin().getX()); int y1 = toInt(t.getOrigin().getY()); int x2 = toInt(x1 + t.getWidth()); int y2 = toInt(y2 + t.getHeight()); return new Box(x1,y1,x2,y2); } private int toInt(double) { … } }

N.  Meng,  B.  Ryder   13  

Pluggable Adapters

•  Preparation for future adaptation – Define a narrow interface

•  Future users of our code will write adapters to implement the interfaces – E.g., ITaxCalculator

N.  Meng,  B.  Ryder   14  

Page 8: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

8  

Factory Pattern

•  Problem: there are many ways to create certain objects

•  Solution: create a framework that is responsible for creating the objects – Key point: clients do not know details about

object creation

N.  Meng,  B.  Ryder   15  

Example

•  Problem – Clients invoke

different pizza constructors

– New pizza types may be added •  Clam, Veggie

– Original pizza types may be removed •  Greek

N.  Meng,  B.  Ryder   16  

PizzaStore orderPizza(type)

Pizza prepare() bake() cut() box()

CheesePizza CheesePizza()

HomeDelivery orderPizza(type)

GreekPizza GreekPizza()

PepperoniPizza PepperoniPizza()

Page 9: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

9  

Solution: Encapsulate object creation

N.  Meng,  B.  Ryder   17  

PizzaStore orderPizza(type)

HomeDelivery orderPizza(type)

SimplePizzaFactory createPizza(type)

Pizza prepare() bake() cut() box()

CheesePizza CheesePizza()

GreekPizza GreekPizza()

PepperoniPizza PepperoniPizza()

Sample Java Code

N.  Meng,  B.  Ryder   18  

public class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; }

public Pizza orderPizza(String type) { Pizza pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }

Page 10: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

10  

N.  Meng,  B.  Ryder   19  

public class SimplePizzaFactory { public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals(“cheese”)) { pizza = new CheesePizza(); } else if (type.equals(“pepperoni”)) { pizza = new PepperoniPizza();

} else if (type.equals(“clam”)) { pizza = new ClamPizza(); } else if (type.equals(“veggie”)) { pizza = new VeggiePizza(); } } return pizza; }

Different Styles of Pizza?

•  New York, Chicago, California •  Factory Class

N.  Meng,  B.  Ryder   20  

PizzaStore orderPizza(type)

NYPizzaFactory createPizza(type)

SimplePizzaFactory createPizza(type)

ChicagoPizzaFactory createPizza(type)

CaliforniaPizzaFactory createPizza(type)

Page 11: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

11  

An Alternative Approach: Factory Method

N.  Meng,  B.  Ryder   21  

PizzaStore orderPizza(type) createPizza(type)

NYPizzaStore createPizza(type)

ChicagoPizzaStore createPizza(type)

CaliforniaPizzaStore createPizza(type)

Sample Code

N.  Meng,  B.  Ryder   22  

public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza = createPizza(type); pizza.prepare(); … … } abstract Pizza createPizza(String type); }

Page 12: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

12  

The Original Object Dependencies

N.  Meng,  B.  Ryder   23  

PizzaStore

NYStyleCheesePizza

NYStylePepperoniPizza

NYStyleVeggiePizza ChicagoStyleVeggiePizza

ChicagoStylePepperoniPizza

ChicagoStyleCheesePizza

Pizza

With Factory Pattern

N.  Meng,  B.  Ryder   24  

PizzaStore

Pizza

NYStyleCheesePizza

NYStylePepperoniPizza

NYStyleVeggiePizza ChicagoStyleVeggiePizza

ChicagoStylePepperoniPizza

ChicagoStyleCheesePizza

Page 13: Design Patterns - Undergraduate Coursescourses.cs.vt.edu/cs3704/fall15/meng/SE13-DesignPatterns.pdf · 10/12/15 1 Design Patterns Design Pattern • Definition – A named general

10/12/15  

13  

Factory Pattern

•  The Dependency Inversion Principle – Depend upon abstractions instead of

concretizations. – Use the pattern when •  a class cannot anticipate the class of objects it

will create •  A class wants its subclasses to specify the

objects to create

N.  Meng,  B.  Ryder   25  

Design Pattern Presentation

•  Problem •  Solution •  Example(s) •  Keypoint(s) •  8-10 slides •  Due: 10/21/2015 choices + slides (if you

want to present design patterns)

N.  Meng,  B.  Ryder   26