Upload
amora
View
51
Download
0
Embed Size (px)
DESCRIPTION
Builder, mediator, and decorator . Team 2 ( Eli.SE ). Builder. Builder Pattern. Multiple objects can be constructed with the same interface Similar to Factory Pattern Focuses on building items step-by-step. Class Diagram. Pizza. Multiple different types, same process Build dough - PowerPoint PPT Presentation
Citation preview
BUILDER, MEDIATOR, AND DECORATOR Team 2 (Eli.SE)
BUILDER
Builder Pattern Multiple objects can be constructed with
the same interface Similar to Factory Pattern Focuses on building items step-by-step
Class Diagram
Pizza Multiple different types, same process
Build dough Build sauce Build toppings
PizzaBuilderabstract class PizzaBuilder {
protected Pizza pizza // has 3 attributes: dough, sauce, toppings
public Pizza getPizza() {return pizza;}
public void createNewPizzaProduct() {pizza = new Pizza();}
abstract public void buildDough();abstract public void buildSauce();abstract public void buildToppings();
}
HawaiianPizzaBuilderclass HawaiianPizzaBuilder extends PizzaBuilder {public void buildDough() {pizza.setDough("cross");}public void buildSauce() {pizza.setSauce("mild");}public void buildToppings() {pizza.setToppings("ham+pineapple");}
}
Cookclass Cook {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {pizzaBuilder = pb;}
public Pizza getPizza() {return pizzaBuilder.getPizza();}
public void constructPizza() {pizzaBuilder.createNewPizzaProduct();pizzaBuilder.buildDough();pizzaBuilder.buildSauce();pizzaBuilder.buildToppings();}
}
BuilderExampleclass BuilderExample {
public static void main(String[] args) {Cook cook = Cook.new();
HawaiianPizzaBuilder hawaiianBuilder = new HawaiianPizzaBuilder();SpicyPizzaBuilder spicyBuilder = new SpicyPizzaBuilder();Pizza hawaiianPizza;Pizza spicyPizza;
cook.setPizzaBuilder(hawaiianBuilder);cook.constructPizza();hawaiianPizza = cook.getPizza();
cook.setPizzaBuilder(spicyBuilder);cook.constructPizza();spicyPizza = cook.getPizza();}
}
Why this over factory pattern? Individual steps may not be used
Hold the pickles, extra mustard
Sources http://en.wikipedia.org/wiki/Builder_patte
rn http://sourcemaking.com/
design_patterns/builder
MEDIATOR DESIGN PATTERN
Overview of Mediator Defines an object that manages how a
set of objects interact Objects interact with the mediator object
rather than with each other
Real World Example
Diagram
Advantages Reduces coupling in situations when
many objects need to communicate Minimizes “spaghetti code” by localizing
the communication process to just one class
Disadvantages Easy for mediators to become complex
in practice
DECORATOR PATTERNRaul Aragonez
Intent Attach additional responsibilities to an
object dynamically. Decorators provide a flexible alternative
to subclassing for extending functionality.
Client-specified embellishment of a core object by recursively wrapping it.
UML Diagram
Participants Component: defines the interface for objects
that can have responsibilities added to them dynamically.
Concrete Component: is the object that can be decorated. It is defined so that zero or more responsibilities can be attached to it.
Decorator: maintains a reference to a Component object an interface that conforms to Component's interface.
Concrete Decorator: wraps around the Concrete Component and adds functionality to it.
Pizza Example
Class Explosion
Instead…
Advantages Responsibilities can be added to one object
without affecting the rest of the objects in the class.
Contents of the object are not affected and Responsibilities can be removed as easily as they are added.
Lots of Features = slow system performance = unnecessary code we need to support. We are paying for features that we don't need!
Therefore, Decorator lets us add features and responsibilities as we need them at run-time.
Pizza example Renovation
Lets try it!
Disadvantages Lots of little objects
As a system gets larger it would become composed of many little objects that look the same, decorator objects. This makes it hard to learn the system and debug the code.
Maintenance of the Decorator code when adding functionality to an object, there is no
need to know the interface of the Decorator class. The Decorator must conform to the interface of the object. This means that there's always the need to maintain the interface to keep it synchronized with the object interface.
Sources http://www.giantflyingsaucer.com/blog/?
p=1084 http://sourcemaking.com/design_pattern
s/decorator http://oreilly.com/catalog/hfdesignpat/ch
apter/ch03.pdf http://pages.cpsc.ucalgary.ca/~jadalow/s
eng60904/decorator_paper.html#intent