design patterns · 6/3/2012  · creational patterns singleton pattern 41 singleton pattern...

25
04/06/2012 1 Design Patterns By Võ Văn Hi Faculty of Information Technologies HUI Creational Patterns Session objectives Overview Factory Method Pattern Abstract Factory Pattern Singleton Pattern 2

Upload: others

Post on 28-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

1

Design Patterns By Võ Văn Hải

Faculty of Information Technologies

HUI

Creational Patterns

Session objectives

Overview

Factory Method Pattern

Abstract Factory Pattern

Singleton Pattern

2

Page 2: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

2

Review of Design Patterns

• A design pattern is a documented best practice or core of a

solution that has been applied successfully in multiple

environments to solve a problem that recurs in a specific set of

situations.

3

Pattern’s elements

In general, a pattern has four essential elements.

• The pattern name

• The problem

• The solution

• The consequences

4

Page 3: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

3

Pattern’s elements The Pattern Name

The pattern name is a handle we can use to describe a design

problem, its solutions, and consequences in a word or two.

• Naming a pattern immediately increases the design vocabulary.

It lets us design at a higher level of abstraction.

• Having a vocabulary for patterns lets us talk about them.

• It makes it easier to think about designs and to communicate

them and their trade-offs to others.

5

Patterns elements The Pattern Problem

The problem describes when to apply the pattern.

• It explains the problem and its context.

• It might describe specific design problems such as how to

represent algorithms as objects.

• It might describe class or object structures that are

symptomatic of an inflexible design.

• Sometimes the problem will include a list of conditions that must

be met before it makes sense to apply the pattern.

6

Page 4: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

4

Pattern’s elements The Pattern Solution

The solution describes the elements that make up the design, their

relationships, responsibilities, and collaborations.

• The solution doesn't describe a particular concrete design or

implementation, because a pattern is like a template that can be

applied in many different situations.

• Instead, the pattern provides an abstract description of a

design problem and how a general arrangement of elements

(classes and objects in our case) solves it.

7

Patterns elements The Pattern Consequences

The consequences are the results and trade-offs of applying the

pattern.

• The consequences for software often concern space and time

trade-offs.

• They may address language and implementation issues as well.

• Since reuse is often a factor in object-oriented design, the

consequences of a pattern include its impact on a system's

flexibility, extensibility, or portability.

• Listing these consequences explicitly helps you understand and

evaluate them

8

Page 5: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

5

Types of Design Patterns By GoF

Erich Gamma, Richard Helm, Ralph Johnson and John Vlisides in their

Design Patterns book define 23 design patterns divided into three

types:

o Creational patterns are ones that create objects for you, rather than

having you instantiate objects directly. This gives your program more

flexibility in deciding which objects need to be created for a given case.

o Structural patterns help you compose groups of objects into larger

structures, such as complex user interfaces or accounting data.

o Behavioral patterns help you define the communication between objects

in your system and how the flow is controlled in a complex program.

9

Types of Design Patterns In our book

• Creational Patterns

o Factory method

o Singleton

o Abstract factory

o …

• Collectional Patterns

o Composite

o Iterator

o …

10

• Structural Patterns

o Decorator

o Adapter

o …

• Behavioral Patterns

o Observer

o Strategy

o Template method

o …

• Concurrency Patterns

o Read-Write Lock

o …

Page 6: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

6

Creational patterns Factory Method Pattern

11

Factory Method Pattern Description

• Intent: Let subclasses decide which class to instantiate.

• Motivating example:

o We want to design a text editor framework that can edit a variety of

document types (Rich Text Format, HTML, plain old text, etc.)

o In swing.text the objects that make up a text editor know an

EditorKit object.

o Implementing the “new” menu item, we ask the EditorKit object to

create a new document.

12

Page 7: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

7

Factory Method Pattern Motivation example 1 solution 1

• One way to do this involves a single EditorKit class.

• In EditorKit we have:

• Problem: To add new document kind, we must edit this class.

Thus it is not reusable.

13

Factory Method Pattern Accessing service provider directly

Client Object Directly Accessing a Service Provider Class Hierarchy

14

Page 8: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

8

Factory Method Pattern Accessing service provider directly disadvantages

• Because every application object that intends to use the services

offered by the class hierarchy needs to implement the class

selection criteria, it results in a high degree of coupling between an

application object and the service provider class hierarchy.

• Whenever the class selection criteria change, every application

object that uses the class hierarchy must undergo a corresponding

change.

• Because class selection criteria needs to take all the factors that

could affect the selection process into account, the implementation

of an application object could contain inelegant conditional

statements.

15

Factory Method Pattern Accessing service provider directly disadvantages

• If different classes in the class hierarchy need to be

instantiated in diverse manners, the implementation of an

application object can become more complex.

• It requires an application object to be fully aware of the

existence and the functionality offered by each class in the

service provider class hierarchy.

16

Page 9: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

9

Factory Method Pattern Accessing service provider using Factory

17

A Client Object Accessing a

Service Provider Class Hierarchy

Using a Factory Method

Factory Method Pattern Motivation example 1 solution 2

• EditorKit is an abstract class with method

• EditorKit has a number of subclasses

18

Page 10: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

10

Factory Method Pattern Motivation example 1 solution 2

• Adding a new document type means creating a new subclass of

Document and a new subclass of EditorKit. It does not require

editing EditorKit, Document, or the code of the text editor.

• EditorKits are factories for Documents

19

Factory Method Pattern Example 2

• Let us design the functionality to log messages in an application.

In general, logging messages is one of the most commonly per

formed tasks in software applications. Logging appropriate

messages at appropriate stages can be extremely useful for

debugging and monitoring applications.

20 Directly solution

Page 11: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

11

Factory Method Pattern Example 2: directly solution

21

Factory Method Pattern Example 2: using Factory method patterns

22

Page 12: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

12

Factory Method Pattern Concrete in Java

• In Java, package java.util defines a number of

o interfaces (Collection, List, Set) and

o classes (ArrayList, LinkedList, HashSet, TreeSet)

o It also defines an Iterator interface for iterating over these various

classes.

o Each class that implements Collection must implement iterator() to

return an iterator object of the appropriate class.

o Collection classes are factories for iterators.

23

24

Page 13: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

13

Creational patterns Abstract Factory Pattern

25

Abstract Factory Pattern Our Problem

• Suppose that you are required to develop a system that accepts

orders for pizzas.

• There are three types of pizzas, namely, cheese, Greek, and

pepperoni.

• The pizzas differ according to the dough used, the sauce used

and the toppings.

26

Page 14: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

14

Abstract Factory Pattern Identifying the aspects that vary

27

Abstract Factory Pattern Encapsulating object creation

OurSimplePizzaFactory

We’ve got name for new

object: we call it a Factory

28

Page 15: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

15

Abstract Factory Pattern Building a simple pizza factory

29

Abstract Factory Pattern The Simple Factory

30

Page 16: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

16

Abstract Factory Pattern System Revision

• Franchises in different parts of the country are now adding

their own special touches to the pizza.

• For example, customers at the franchise in New York like a thin

base, with tasty sauce and little cheese.

However, customers in Chicago prefer a thick base, rich sauce

and a lot of cheese. Some franchises also cut the pizza slices

differently (e.g. square)

• You need to extend the system to cater for this.

31

Abstract Factory Pattern Description

• Provide an interface for creating families of related or

dependent objects without specifying their concrete classes.

• Using when:

• a system should be independent of how its products are created,

composed, and represented.

• a system should be configured with one of multiple families of

products.

• a family of related product objects is designed to be used together,

and you need to enforce this constraint.

• you want to provide a class library of products, and you want to reveal

just their interfaces, not their implementations.

32

Page 17: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

17

Abstract Factory Pattern UML

33

Client

ProductB2 ProductB1

Abs tractProductB

ProductA2

Abs tractProductA

ProductA1

AbstractFactory

+ CreateProductA() : AbstractProductA + CreateProductB() : AbstractProductB

ConcreteFactory1

+ Cr eateProductA() + Cr eateProductB()

ConcreteFactory2

+ Cr eateProductA() + Cr eateProductB()

return new ProductB1();

return new ProductA1();

return new ProductB2();

return new ProductA2();

Abstract Factory Pattern UML elements

• AbstractFactory (ContinentFactory)

o declares an interface for operations that create abstract products

• ConcreteFactory (AfricaFactory, AmericaFactory)

o implements the operations to create concrete product objects

• AbstractProduct (Herbivore, Carnivore)

o declares an interface for a type of product object

• Product (Wildebeest, Lion, Bison, Wolf)

o defines a product object to be created by the corresponding concrete factory

o implements the AbstractProduct interface

• Client (AnimalWorld)

o uses interfaces declared by AbstractFactory and AbstractProduct classes

34

Page 18: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

18

35

Abstract Factory Pattern The Creator classes

Classes that produce products are called concrete creators 36

Page 19: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

19

Abstract Factory Pattern The Product classes

37 By Võ Văn Hải -

[email protected]

Abstract Factory Pattern vs. Factory Pattern

38

class Factory Method

«factory»

PizzaFactory

+ CreatePizza() : Pizza

Pizza

PizzaShoarma PizzaQuatroStagioni

Client

Page 20: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

20

Abstract Factory Pattern vs. Factory Pattern

39

class Abstract Factory

Client

«abstract fac...

PizzaFactory

ItalianPizzaFactory

TurkishPizzaFactory

Pizza

CalzonePizza

MargerithaPizza

ShoarmaPizza

creates

creates

creates

request pizza

eats

40

Page 21: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

21

Creational patterns Singleton Pattern

41

Singleton Pattern Creating a Single Instance of a Class

• In some cases it maybe necessary to create just one instance of

a class.

• This maybe necessary because:

o More than one instance will result in incorrect program behavior

o More than one instance will result in the overuse of resources

o More than one instance will result in inconsistent results

o There is a need for a global point of access

• How would you ensure that just one instance of a class is

created?

42

Page 22: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

22

Singleton Pattern defined

• The Singleton Pattern ensure a class has only one instance, and

provides a global point of access to it.

Singleton

static uniqueInstance //Other useful Singleton data

static getInstance():Singleton //Other useful Singleton methods

43

Singleton Pattern Implementation

Are you sure it has only one instance?

44

Page 23: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

23

Singleton Pattern Thread safe singleton

• Lazy Singleton

45

Singleton Pattern Thread safe singleton

• Eager Singleton

46

Page 24: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

24

Other Creational patterns

• Builder pattern: Separates object construction from its representation

• Prototype pattern: A fully initialized instance to be copied or cloned

47

Summary

Overview

Factory Method Pattern

Abstract Factory Pattern

Singleton Pattern

48

Page 25: Design Patterns · 6/3/2012  · Creational patterns Singleton Pattern 41 Singleton Pattern Creating a Single Instance of a Class • In some cases it maybe necessary to create just

04/06/2012

25

49

IF you find yourself in CONTEXT

for example EXAMPLES,

with PROBLEM,

entailing FORCES

THEN for some REASONS,

apply DESIGN FORM AND/OR RULE

to construct SOLUTION

leading to NEW CONTEXT and OTHER PATTERNS