144
Design patterns Assoc. prof. Catalin Boja, PhD [email protected] http://acs.ase.ro/software-quality-testing

Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

  • Upload
    dothien

  • View
    219

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design patternsAssoc. prof. Catalin Boja, PhD

[email protected]

http://acs.ase.ro/software-quality-testing

Page 2: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Source code quality

Principles for writing the code:

• Easy to read / understand - clear

• Easy to modify - structured

• Easy to reuse

• Simple (complexity)

• Easy to test

• Implement patterns for the standard problem

Left: Simply Explained: Code Reuse 2009-12-

03.By Oliver Widder, Webcomics Geek Aad Poke.acs.ase.ro [email protected] 2

Page 3: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Source code quality

Forces that influence it:

• Available time (delivery terms)

• Costs

• The experience of the programmer

• Programmer competences

• Specifications clarity

• Solution complexity

• Change rates for specifications, requirements, team, etc

http://khristianmcfadyen.com/

acs.ase.ro [email protected] 3

Page 4: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Anti-Pattern: Big ball of mud

“A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle.”

Brian Foote and Joseph Yoder, Big Ball of Mud, September 1997

acs.ase.ro [email protected] 4

Page 5: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Anti-Pattern: Big ball of mud

Where from ? Why ?• Throwaway code - Temporary

(Prototyping) solutions to be replaced / rewritten

• Cut and Paste code• Adapting code by commenting /

deleting other solutions• Very short or unrealistic deadlines• Lack of experience• Lack of standards / procedures

acs.ase.ro [email protected] 5

Page 6: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Anti-Pattern: Big ball of mud

How do you avoid it?

• Rewriting the code (Refactoring) to an acceptable maturity level

• Use Clean Code Principles

• Design Patterns Implementation

acs.ase.ro [email protected] 6

Page 7: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-pattern

• A pattern is a reusable solution for a standard problem in a given context

• Facilitates the reuse of architectures and software design

• They are not data structures

acs.ase.ro [email protected] 7

Page 8: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-pattern

“A pattern involves a general description of a recurring solution to a recurring problem with various goals and constraints. It identify more than a solution, it also explains why the solution is needed.“

James Coplien

“... describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice”

Cristopher Alexander

acs.ase.ro [email protected] 8

Page 9: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Pattern advantages

• Allow reuse of standard solutions at source / architecture code level

• Allow source / architecture code documentation

• Allow easier understanding of the source code / architecture

• They are universally known concepts - they define a common vocabulary

• They are tested and well documented solutions

acs.ase.ro [email protected] 9

Page 10: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Pattern in Software Architectures

Enterprise

• OO ArchitectureSystem

• SubsystemApplication

• FrameworksMacro

• Design-PatternsMicro

• OOPObjects

acs.ase.ro [email protected] 10

Page 11: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Pattern components

• Name:• It is part of the vocabulary of a programmer / designer / software architect• Identifies the pattern uniquely

• Problem:• Describes the intended purpose• Defines the context• Determines when the pattern is applicable

• Solution• UML diagram, pseudo-code describing the elements

• Consequences• Results• Advantages and disadvantages

Name Problem

Solution Consequences

acs.ase.ro [email protected] 11

Page 12: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Istoric Design-Pattern

• 1970 – The first models related to the Windows and Desktop concepts (Smalltalk, Xerox Parc, Palo Alto)

• 1978 – MVC pattern (Goldberg and Reenskaug, Smalltalk, Xerox Parc)

• 1987 - Kent Beck and Ward Cunningham, “Using Pattern Languages for Object-Oriented Programs”, OOPSLA-87 Workshop

• 1991 - Erich Gamma, an idea for a Ph.D. thesis about patterns

• 1993 - E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns: Abstraction and Reuse of Object-Oriented Design. ECOOP 97 LNCS 707, Springer, 1993

acs.ase.ro [email protected] 12

Page 13: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Istoric Design-Pattern

Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides(Addison-Wesley, 1995) - Design Patterns

• The Gang of Four (GOF)

• The book describes 23 patterns -problems and solutions that can be applied in many scenarios

• The most popular computer software book

acs.ase.ro [email protected] 13

Page 14: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Patterns implementation

• Observer in Java AWT si Swing for callbacks

• Iterator in C++ STL and Java Collections

• Façade in many Open-Source libraries to hide the complexity of internal routines

• Bridge si Proxy in frameworks for distributed applications

• Singleton in Hybernate and NHybernate

acs.ase.ro [email protected] 14

Page 15: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Pattern types

• Creational• Initializing and configuring classes and objects

• Structural• Composition of classes and objects

• Disconnect interfaces and classes

• Behavioral• Responsibility distribution

• Interaction between classes and objects

Creational Structural

Behavioral

acs.ase.ro [email protected] 15

Page 16: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Design-Pattern types

Creational

• Factory Method

• Abstract Factory

• Builder

• Prototype

• Singleton

Structural

• Adapter

• Bridge

• Composite

• Decorator

• Façade

• Flyweight

• Proxy

Behavioral

• Interpreter• Chain of Responsibility• Command• Iterator• Mediator• Memento• Observer• State• Strategy• Visitor• Template

acs.ase.ro [email protected] 16

Page 17: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

• Abstract Factory• Pattern for creating objects in a specific context

• Builder• Pattern for structural (incremental) creation of complex objects

• Factory Method• Pattern that defines a method for creating objects from the same family (interface)

in subclasses

• Prototype• Pattern for cloning new instances (clones) of an existing prototype

• Singleton• Pattern for single instance creation (unique)

acs.ase.ro [email protected] 17

Page 18: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

• Adapter:• Adapts the server / service interface to the client

• Bridge:• Decouples the abstract implementation model

• Composite:• Aggregation of several similar objects

• Decorator:• Expands an object transparently

• Facade:• Simplifies the interface of a module / subsystem

• Flyweight:• Sharing memory between similar objects.

• Proxy:• Interface to other objects / resources

acs.ase.ro [email protected] 18

Page 19: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Behavioral Design-Patterns

• Chain of Responsibility:• Manages the handling of an event by multiple solution providers

• Command:• Request or Action is first-class object, hence re-storable

• Iterator:• Manages scrolling through a collection of items

• Interpreter:• Interpreter for a language with a simple grammar

• Mediator:• Coordinates the interaction between multiple associates

• Memento:• It saves and restores the status of an object

acs.ase.ro [email protected] 19

Page 20: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Behavioral Design-Patterns

• Observer:• Defines a handler for different events

• State:• Manages objects whose behavior depends on their condition

• Strategy:• Encapsulates different algorithms

• Template Method:• Incorporates an algorithm whose steps depend on a derived class

• Visitor:• Describes methods that can be applied to a non-homogeneous structure

acs.ase.ro [email protected] 20

Page 21: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-PatternsSingleton, Abstract Factory, Factory Method, Simple Factory, Builder,

Prototype

Page 22: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

SINGLETON Pattern

Page 23: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• You want to create a single instance for a class to manage a resource / event in a centralized manner;

• The solution is based on the existence of a single (unique) instance that can be created only once but can be referenced multiple times;

• Provides a single point of access, globally visible, to the unique object

• Examples: databases or other resources connection management; single logging mechanism; events manager; visual resources manager; configuration manager.

SINGLETON- Problem

acs.ase.ro [email protected] 23

Page 24: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SINGLETON - Diagrama

public class Singleton {

private static Singleton instance = null;

private Singleton() { }

public static synchronized Singleton

getInstance() {

if (instance == null) {

instance = new Singleton ();

}

return instance;

}

}

acs.ase.ro [email protected] 24

Page 25: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Singleton() • private constructor (callable only inside the class)

• private static Singleton instance• a class type static and private attribute that will reference the unique instance

• Singleton getInstance()• public method to give access to the unique object

• the unique object is created when the method is called for the first time

SINGLETON - Components

acs.ase.ro [email protected] 25

Page 26: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SINGLETON – Other implementations

• Version 1 – static & private attribute

• Version 2 – static & public constant attribute

• Version 3 – using an enum (Joshua Bloch in Effective Java, 2nd Edition)

• Version 4 – Singleton collection or Singleton registry – multiple unique objects are managed using a collection

acs.ase.ro [email protected] 26

Page 27: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Advantages:

• Centralized management of resources through a single object

• Strict control of instantiations of a class – only once

• Does not allow duplication of objects

• Easy to implement

• Lazy instantiation – the object is created when is needed

Disadvantages:

• In multi-threading can generate synchronization or cooperation problems if the singleton is shared

• Can generate a bottleneck that will affect the app performance

SINGLETON – Advantages and Disadvantages

acs.ase.ro [email protected] 27

Page 28: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SINGLETON – Scenarios

• Unique connection to the database;

• Unique management of configuration files/file;

• Unique management of preferences on the Android platform (SharedPreferences) or of application settings in a broader context;

• Unique management of network connections;

• Centralized management of access to certain resources used by the software solution;

• Single management of expensive objects (costly, based on the time and resources needed to create) that must have a unique instance, used several times.

acs.ase.ro [email protected] 28

Page 29: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

FACTORY Pattern

Page 30: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FACTORY - Problem

• implementation of a centralized mechanism for creating objects; the process is transparent to the client; using the public interface client knows how to create objects but does not know how this is implemented;

• the solution can be extended by adding new types of concrete objects without affecting existing code;

• the creation process complexity is hidden to the customer;

• items are referenced by a common interface; concrete classes are a family of objects defined around a common interface;

• removes client code dependence on methods/classes that create the objects;

acs.ase.ro [email protected] 30

Page 31: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FACTORY

Abstract Factory

FactoryMethod

Simple Factory

acs.ase.ro [email protected] 31

Page 32: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SIMPLE FACTORY

• particular case of the GoF Factory pattern

• one of the most used in production due to its simplicity of implementation and its benefits

• is not part of GoF; it’s a natural derivation based on best practices

acs.ase.ro [email protected] 32

Page 33: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SIMPLE FACTORY - Diagram

acs.ase.ro [email protected] 33

Page 34: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

SIMPLE FACTORY - Components

InterfataProdus

• abstract interface for Produs type objects;

Produs

• concrete classes that implement the interface; the objects will be generated by the Factory;

Factory

• class that implements the creation process for InterfaceProdus interface type objects;

Client

• a different class/method that uses the Factory interface to build new objects;

acs.ase.ro [email protected] 34

Page 35: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Example of SINGLETON and SIMPLE FACTORY

acs.ase.ro [email protected] 35

Page 36: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

FACTORY METHOD Pattern(Virtual Constructor)

Page 37: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FACTORY METHOD - Diagram

acs.ase.ro [email protected] 37

Page 38: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• InterfataProdus• generic interface that defines the types of objects that can be created

• Produs• concrete class that defines the type of objects that can be created

• Factory• abstract class that defines the interface of an object family generator

• FacgtoryConcretA, FactoryConcretB …

• concrete class that implements the objects generator

FACTORY METHOD - Components

acs.ase.ro [email protected] 38

Page 39: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FACTORY METHOD - Example

acs.ase.ro [email protected] 39

Page 40: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Advantages:

• All created objects have a common interface

• Strict control of instantiations - objects are not created directly using constructor but by the factory method

• Different types of objects are managed unified by the common interface - new types of the same family can be added without costly changes

• Easy to implement

• Can be generated new objects belonging to the same family (have the common interface)

• Implements the Dependency Inversion principle

Disadvantages:

• You can’t generate “new” objects (as with a different interface)

• The constructors are private – blocks extending those classes

FACTORY METHOD – Advantages and Disadvantages

acs.ase.ro [email protected] 40

Page 41: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

ABSTRACT FACTORY Pattern

Page 42: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Se dorește implementarea unui mecanism prin care creareaobiectelor este transparenta pentru client

• Soluția poate să fie extinsă prin adăugarea de noi tipuri concrete de obiecte fără a afecta codul scris

• Complexitatea creării obiectelor este ascunsa clientului. Acesta știecum sa le creeze însă nu știe cum acestea sunt efectiv create

• Crearea obiectelor este decuplata de soluție si generatorul poate fi înlocuit fără prea mare efort

• Obiectele sunt referite printr-o interfață comună și nu direct. Eleformează o familie de obiecte in jurul interfeței comune

ABSTRACT FACTORY- Problem

acs.ase.ro [email protected] 42

Page 43: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ABSTRACT FACTORY - Diagram

acs.ase.ro [email protected] 43

Page 44: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• InterfataFactory• interfață ce definește metodele abstracte pentru crearea de instanțe

• InterfataProdusA/InterfataProdusB• interfețe ce definesc tipurile abstracte de obiecte ce pot fi create

• FactoryConcretA/FactoryConcretB• clase concrete ce implementează interfața si metodele prin care sunt create

obiecte de tipul Product

• ProduseTipA, ProduseTipB,…• clase concrete ce definesc diferitele tipuri de obiecte ce pot fi create

ABSTRACT FACTORY - Componente

acs.ase.ro [email protected] 44

Page 45: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ABSTRACT FACTORY - Example

acs.ase.ro [email protected] 45

Page 46: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ABSTRACT FACTORY - Example

acs.ase.ro [email protected] 46

Page 47: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ABSTRACT FACTORY - Example

acs.ase.ro [email protected] 47

Page 48: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Avantaje:

• decuplează generatorul de instanțe de clientul care le utilizează;

• controlul strict al instanțierii – obiectele nu sunt create direct princonstructori ci prin metodele de tip factory;

• diferitele tipuri de obiecte sunt gestionate unitar prin interfață comuna –noi tipuri pot fi adăugate fără modificări

Dezavantaje:

• număr mare de clase implicate

• Nivel de complexitate ridicat

ABSTRACT FACTORY– Avantaje si Dezavantaje

acs.ase.ro [email protected] 48

Page 49: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ABSTRACT FACTORY – Scenarios

• Gestiune creare produse catalog magazine virtual

• Gestiune creare tipuri diferite de client

• Gestiune creare tipuri diferite de rapoarte

• Gestiune creare tipuri de numere de telefon

• Gestiune creare tipuri de conturi bancare

• Gestiune creare tipuri de pizza

• Gestiune creare meniuri într-un restaurant

acs.ase.ro [email protected] 49

Page 50: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FACTORY

acs.ase.ro [email protected] 50

• Toate pattern-urile Factory promovează loose coopling si sunt bazatepe Dependency Inversion Principle

• Factory Method • bazata pe moștenire – crearea obiectelor este realizata de subclase ce

implementează metoda factory• Are scopul de a delega crearea obiectelor către subclase

• Abstract Factory• bazata pe compunere – crearea obiectelor este realizata de metode publicate

de interfață• Are scopul de a crea familii de obiecte fără a depinde de implementarea lor

concreta

Page 51: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

Modelul BUILDER(Adaptive Builder)

Page 52: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Soluția trebuie sa construiască obiecte complexeprintr-un mecanism care este independent de procesul de realizare a obiectelor

• Clientul construiește obiectele complexespecificând doar tipul si valoarea sa, fără a cunoaștedetaliile interne ale obiectului (cum stochează si reprezintă valorile)

• Procesul de construire a obiectelor trebuie sa poatăfi utilizat pentru a defini obiecte diferite din aceeașifamilie

• Obiectele sunt gestionate prin interfața comuna

• Instanța de tip Builder construiește obiectul însătipul acestuia este definit de subclase

BUILDER - Problema

acs.ase.ro [email protected] 52

Page 53: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

BUILDER- Diagrama

acs.ase.ro [email protected] 53

http://en.wikipedia.org/wiki/Builder_pattern

Page 54: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• AbstractBuilder• interfața abstracta ce definește metodele prin care sunt construite parti ale

obiectului complex

• Builder• clasa concreta ce construiește părțile si pe baza lor obiectul final

• Produs• clasa abstracta ce definește obiectul complex ce este construit

• Director• clasa concreta ce construiește obiectul complex utilizând interfața de tip

Builder

BUILDER - Componente

acs.ase.ro [email protected] 54

Page 55: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Avantaje:

• Obiectele complexe pot fi create independent de părțile care îlcompun (un obiect poate sa le conțină pe toate sau doar o parte)

• Sistemul permite reprezentarea diferita a obiectelor create printr-o interfață comună

• Algoritmul de creare a obiectului este flexibil deoarece clientul alegece părți sa fie create

Dezavantaje:

• Atenție la crearea de obiecte – pot fi omise atribute

BUILDER - Avantaje si Dezavantaje

acs.ase.ro [email protected] 55

Page 56: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Creational Design-Patterns

Modelul PROTOTYPE

Page 57: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROTOTYPE – Scenariu

ACME Inc. dorește să dezvolte un joc 3D pentru dispozitiveAndroid utilizând un engine propriu. Cele 2 modele 3D pentru caractere sunt destul de complexe și generarea lorare impact asupra timpului de procesare și implicit asupraduratei de viață a acumulatorului. Același model esteutilizat de mai multe ori pentru a popula o scena cu personaje. Trebuie găsită o soluție eficientă prin care scenele să fie încărcate rapid.

acs.ase.ro [email protected] 57

Page 58: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Soluția generează obiecte costisitoare (timp creare si memorieocupata) cu durata de viată lungă

• Pentru eficienta, Soluția reutilizează obiectul prin clonarea acestuia(se creează o instant noua a obiectului)

• Implementat printr-o metoda clone()

PROTOTYPE - Problema

acs.ase.ro [email protected] 58

Page 59: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROTOTYPE - Diagrama

acs.ase.ro [email protected] 59

Page 60: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROTOTYPE - Componente

• AbstractPrototype – clasă abstractă ce definește interfața unuiprototip; clasa poate implementa o versiune generică a metodeiclone() care să fie moștenită de prototipurile concrete; în Java, aceasta clasă extinde interfața Cloneable pentru a permite clonareaobiectului;

• Prototype1, Prototype2 – clase concrete ce reprezintă implementareapattern-ului Prototype dând posibilitatea clonării obiectelor existente;

• Client – secvență de cod sau API ce folosește clasele ce extindAbstractPrototype

acs.ase.ro [email protected] 60

Page 61: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROTOTYPE - Implementare

SHALLOW COPY VS. DEEP COPY

In Java implementarea implicităpentru clone() este ?

[email protected] 61

Page 62: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROTOTYPE - Avantaje si Dezavantaje

Avantaje:

• Creare rapidă de obiecte identice (valori) prin clonare

• Evită apelul explicit al constructorului

• Poate fi construita o colectie de prototipuri care sa fie utilizata pentrua genera obiecte noi

Dezavantaje:

• Atenție la crearea de obiecte ce partajează aceleași resurse –shallow copy

acs.ase.ro [email protected] 62

Page 63: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Adapter, Facade, Decorator, Composite, Flyweight, Proxy

Structural Design-Patterns

Page 64: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

Modelul ADAPTER(Wrapper)

Page 65: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ADAPTER – Scenariu

ACME Inc. dorește să cumpere un nou framework pentruserviciile din back-end. Interfața pentru aceste serviciigestionează datele prin intermediul obiectelor de tip ACME, iar noul framework procesează datele prin intermediulobiectelor de tip MICRO. Programatorii companiei trebuiesa găsească o soluție de a integra cele doua framework-urifără a le modifica.

acs.ase.ro [email protected] 65

Page 66: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Utilizarea împreună a unor clase ce nu au o interfață comuna

• Clasele nu se modifica însă se construiește o interfață ce permiteutilizarea lor in alt context

• Clasele sunt adaptate la un nou context

• Apelurile către interfața clasei suntmascate de interfața adaptorului

• Transformarea datelor dintr-un format înaltul

ADAPTER - Problema

acs.ase.ro [email protected] 66

Page 67: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Claseexitente

Framework client

ADAPTER - Scenariu

Clase existente AdaptorFramework

client

Codul nu se schimbă Codul nu se schimbă

acs.ase.ro [email protected] 67

Page 68: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

ADAPTER - Diagrama

acs.ase.ro [email protected] 68

Page 69: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• ClasaExistenta• clasa existenta ce trebuie adaptata la o noua interfață;

• ClasaContextNou• definește interfața specifică noului domeniu;

• Adaptor• adaptează interfața clasei existente la cea a clasei din noul context;

• contine (composition) o referinta catre clasa/obiectul ce trebuie adaptat

• Client• Reprezintă framework-ul care apelează interfața specifică noului domeniu

ADAPTER - Componente

acs.ase.ro [email protected] 69

Page 70: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Avantaje:

• Clasele existente (la client si la furnizor) nu sunt modificate pentru a putea fi folosite într-un alt context

• Se adaugă doar un layer intermediar

• Pot fi definite cu ușurință adaptoare pentru orice context

Dezavantaje:

Adaptorul de clase se bazează pe derivare multipla, lucru care nu esteposibil in Java. Alternativa este prin interfețe si compunere

ADAPTER – Avantaje si Dezavantaje

acs.ase.ro [email protected] 70

Page 71: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

Modelul FAÇADE(Wrapper)

Page 72: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FAÇADE - Scenariu

ACME Inc. dezvoltă o soluție software pentru managementul uneilocuințe inteligente. Includerea în framework a tuturorcomponentelor controlabile dintr-o astfel de locuință (ferestre, încălzire, alarma, etc) a generat un număr mare de clase. Departamentul care dezvolta interfața Web a soluției oferă un set minim de funcții ce pot fi controlate de la distanta. Deșifuncționalitatea este simpla, numărul mare de clase ce se instanțiază și a metodelor apelate îngreunează dezvoltarea si testarea. In acest sens, o interfață mai simpla ar ajuta acestdepartament.

acs.ase.ro [email protected] 72

Page 73: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Soluția conține o mulțime de clase iar execuțiaunei funcții presupune apeluri multiple de metode aflate in aceste clase

• Clasele nu se modifica însă se construiește un layer intermediar ce permite apelul/gestiuneafacila a metodelor din mai multe interfețe

• Utilă in situația in care framework-ul creste in complexitate si nu este posibila rescrierea luipentru simplificare

• Apelurile către multiplele interfețe suntmascate de aceasta interfață comună

FAÇADE - Problema

acs.ase.ro [email protected] 73

Page 74: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FAÇADE - Scenariu

acs.ase.ro [email protected] 74

Page 75: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FAÇADE - Diagrama

acs.ase.ro [email protected] 75

Page 76: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Clasa1, Clasa2, …, Package1, Package2, …• clase existente ce pun la dispoziție diferite interfețe;

• Facade• Definește o interfața simplificata pentru contextul existent;

• Client• Reprezintă framework-ul care apelează interfața specifica noului domeniu

FAÇADE - Componente

acs.ase.ro [email protected] 76

Page 77: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Avantaje:

• Framework-ul nu se rescrie

• Se adaugă doar un layer intermediar ce ascunde complexitatea framework-uluidin spate

• Pot fi definite cu ușurință metode care sa simplifice orice situație

• Implementează principiul Least Knowledge – reducerea interacțiunilor intreobiect la nivel de “prieteni apropriați”

Dezavantaje:

• Creste numărul de clase wrapper

• Creste complexitatea codului prin ascunderea unor metode

• Impact negativ asupra performantei aplicației

FAÇADE - Avantaje si Dezavantaje

acs.ase.ro [email protected] 77

Page 78: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

Modelul DECORATOR(Wrapper)

Page 79: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Extinderea (decorarea) statica sau la run-time a funcționalității sau stării unor obiecte, independent de alte instanțe ale aceleiași clase

• Obiectul poate sa fie extins prin aplicarea maimultor decoratori

• Clasa existenta nu trebuie sa fie modificata

• Utilizarea unei abordări tradiționale, prinderivarea clasei, duce la ierarhii complexe cesunt greu de gestionat. Derivarea adaugăcomportament nou doar la compilare

DECORATOR - Problema

acs.ase.ro [email protected] 79

Page 80: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

DECORATOR - Diagrama

acs.ase.ro [email protected] 80

Page 81: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• AbstractProduct• clasa abstracta ce definește interfața obiectelor ce pot fi decorate cu noi funcții;

• ConcreteProduct• definește obiecte ce pot fi decorate;

• Decorator• gestionează o referința de tip AbstractProduct către obiectul decorat; • metodele moștenite din AbstractProduct apelează implementările specifice din clasa

obiectului referit;• Poate defini o interfață comună claselor decorator;

• ConcreteDecorator• Adaugă funcții noi obiectului referit;

DECORATOR - Componente

acs.ase.ro [email protected] 81

Page 82: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Extinderea funcționalității a unui obiect particular se face dinamic, la run-time

• Decorarea este transparenta pentru utilizator deoarece clasamoștenește interfața specifica obiectului

• Decorarea se face pe mai multe niveluri, însă transparent pentruutilizator

• Nu impune limite privind un număr maxim de decorări

DECORATOR - Avantaje

acs.ase.ro [email protected] 82

Page 83: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Un decorator este un wrapper pentru obiectul inițial. El nu esteidentic cu obiectul încapsulat

• Utilizarea excesiva generează o mulțime de obiecte care arata la feldar care se comporta diferit –> dificil de înțeles si verificat codul

• Situația trebuie analizata cu atenție deoarece in unele situații pattern-ul Strategy este mai indicat

DECORATOR - Dezavantaje

acs.ase.ro [email protected] 83

Page 84: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Adapter vs. Facade vs. Decorator

Adapter – asigură o interfață diferită obiectului

Facade – asigură o interfață simplificată obiectului

Decorator – asigură o interfață îmbunătățită obiectului

acs.ase.ro [email protected] 84

Page 85: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

Modelul COMPOSITE

Page 86: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMPOSITE - Scenariu

ACME Inc. dezvoltă o soluție software pentru managementulresurselor umane dintr-o companie. Soluția trebuie să ofere un mecanism unitar care să centralizeze angajații companiei și care sățină cont de:

• relațiile ierarhice

• apartenența angajaților la un departament

• rolurile diferite ale angajaților

• setul comun de funcții pe care un angajat le poate îndeplini

acs.ase.ro [email protected] 86

Page 87: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMPOSITE - Problema

• Soluția conține o mulțime de clase aflate in relație ierarhică cetrebuie tratate unitar

• Se construiesc structuriarborescente în care nodurileintermediare și cele frunză sunttratate unitar

acs.ase.ro [email protected] 87

Page 88: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMPOSITE - Scenariu

Meniuri

Meniubăuturi

Non-alcoolice

Alcoolice

Meniuaperitive

Meniusupe

Supă de roșii

Supă

acs.ase.ro [email protected] 88

Page 89: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMPOSITE - Diagrama

acs.ase.ro [email protected] 89

Page 90: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Componenta• conține descrierea abstractă a tuturor componentelor din ierarhie

• Descrie interfața obiectelor aflate in compoziție

• NodFrunza• Reprezintă nodurile frunza din compoziție

• Implementează toate metodele

• Composite• Reprezintă o componentă compusa – are noduri fiu

• Implementează metode prin care sunt gestionate nodurile fiu

COMPOSITE - Componente

acs.ase.ro [email protected] 90

Page 91: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Framework-ul nu se rescrie

• Permite gestiunea facila a unor ierarhii de clase ce conțin atâtprimitive cat si obiecte compuse

• Codul devine mai simplu deoarece obiectele din ierarhie sunt tratateunitar

• Adăugarea de noi componente care respecta interfața comună nu ridica probleme suplimentare

COMPOSITE - Avantaje

acs.ase.ro [email protected] 91

Page 92: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele structurale

Modelul FLYWEIGHT

Page 93: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FLYWEIGHT – Scenariu problemă

ACME Inc. dezvolta un editor de texte ca soluție alternativa la soluțiile cunoscute. In faza de testare s-a observat ca pemăsura ce crește dimensiunea textului, crește și memoriaocupată de această aplicația. Ritmul de creștere este unulanormal, destul de rapid , iar in final generează întârzieri întremomentul tastării unui caracter si cel al afișării. Teste peaceasta zona au arătat ca exista o legătura între numărul de caractere tastate si numărul de obiecte.

acs.ase.ro [email protected] 93

Page 94: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Soluția generează o mulțime de obiecte cu o structura interna complexa si care ocupa un volum mare de memorie

• Obiectele au atribute comune însă o parte din starea lor variază; memoria ocupata de elepoate fi minimizata prin partajarea stării fixe intre ele

• Starea obiectelor poate fi gestionat prinstructuri externe iar numărul de obiecte efectivcreate poate fi minimizat

• Utilizarea unui obiect înseamnă reîncărcareastării lui variabile într-un obiect existent

FLYWEIGHT - Problema

acs.ase.ro [email protected] 94

Attack of Clones

Page 95: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FLYWEIGHT - Scenariu

acs.ase.ro [email protected] 95

Not known author source

Page 96: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FLYWEIGHT - Diagrama

acs.ase.ro [email protected] 96

Page 97: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Flyweight• Interfață ce permite obiectelor să primească valori ce fac parte din starea lor si să

facă diferite procesări pe baza acesteia;

• FlyweightFactory• Un pattern de tip factory ce construiește si gestionează obiecte de tip flyweight;• Menține o colecție de obiecte diferite astfel încât ele sa fie create o singură dată

• FlyweightConcret• Clasa implementează interfața de tip Flyweight si permite stocarea stării permanente

(ce nu poate fi partajat) a obiectelor• Valori ce reprezintă o stare temporara partajata între obiecte sunt primite si

procesate prin intermediul metodelor din interfață

• Client• Gestionează obiectele de tip flyweight si starea lor temporara

FLYWEIGHT - Componente

acs.ase.ro [email protected] 97

Page 98: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Avantaje:• Se reduce memoria ocupata de obiecte prin partajarea lor intre clienți sau

a stării lor intre obiecte de același tip• Pentru a gestiona corect partajarea obiectelor de tip Flyweight între clienți

și fire de execuție, acestea trebuie sa immutable

Dezavantaje:• Trebuie analizate clasele si contextul pentru a se determina ce reprezintă

stare variabilă ce poate fi internalizată• Efectele sunt vizibile pentru soluții in care numărul de obiecte este mare• Nivelul de memorie redusa depinde de numărul de categorii de obiecte de

tip Flyweight

FLYWEIGHT - Avantaje si Dezavantaje

acs.ase.ro [email protected] 98

Page 99: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FLYWEIGTH vs DECORATOR vs PROTOTYPE

• Prototype creează obiecte identice prin clonarea unui obiect existent. Obiectele create sunt identice (spațiu de memorie, atribute)

• Decorator permite modificarea la run-time a funcționalității obiectuluifără a-i schimba definiția. Obiectele sunt create în mod normal și apoidecorate la execuție

• Flyweight permite stocarea și crearea obiectelor prin partajarea unuiobiect parțial ce conține doar partea comună (atribute și metode). Obiectele flyweight partajează partea comună însă își gestioneazăpartea specifică

acs.ase.ro [email protected] 99

Page 100: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

FLYWEIGTH vs DECORATOR vs PROTOTYPE

acs.ase.ro [email protected] 100

PROTOTYPE DECORATOR FLYWEIGTH

Prototip inițial De

cora

te la

ru

n-t

ime

cu a

ltă

culo

are

Obiect defaultFlyweight

Setă

ri p

arti

cula

re p

en

tru

inst

anțe

Page 101: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Adapter – modifica interfața obiectului

• Decorator – adaugă dinamic funcții noi la comportamentul obiectului

• Façade – asigura o interfață simplificata

FLYWEIGHT - Șabloane asemănătoare

acs.ase.ro [email protected] 101

Page 102: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Structural Design-Patterns

Modelul PROXY

Page 103: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Interconectarea de API-uri diferite aflate pe aceeași mașină sau in rețea

• Definirea unei interfețe între framework-uri diferite

• Obiectul accesat este extern sistemului

• Obiectele accesate sunt create la cerere

• Validare acces obiect

• Adaugare functionalitate la accesarea obiectului

PROXY - Problema

acs.ase.ro [email protected] 103

Page 104: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

PROXY - Diagrama

acs.ase.ro [email protected] 104

Page 105: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• InterfataEntitate• Definește interfața obiectului real la care se face conectarea

• Interfața este implementata si de proxy astfel încât să se poată conecta la obiecte

• Proxy• Gestionează referința către obiectul real

• Implementează interfața obiectului real

• Controlează accesul la obiectul real

• Entitate• Obiectul real către care proxy-ul are legătura

PROXY - COMPONENTE

acs.ase.ro [email protected] 105

Page 106: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Virtual Proxies: gestionează crearea si inițializarea unor obiectecostisitoare; acestea pot fi create doar atunci când e nevoie saupartajează o singura instanță intre mai mulți client;

• Remote Proxies: asigura o instanță virtuala locala pentru un obiectaflat la distanta – Java RMI.

• Protection Proxies: controlează accesul la metodele unui obiect sau la anumite obiecte.

• Smart References: gestionează referințele către un obiect

PROXY - Tipuri de PROXY

acs.ase.ro [email protected] 106

Page 107: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Adapter – modifică interfața obiectului

• Decorator – adaugă dinamic funcții noi la comportamentulobiectului

• Strategy (Behavioral) – modifică comportamentul obiectului

• Façade – asigura o interfață simplificată

• Composite – agregă mai multe obiecte asemănătoare pentruo gestiune unitară

Șabloane asemănătoare

acs.ase.ro [email protected] 107

Page 108: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Strategy, Observer, Chain of Responsability, Template, State, Command, Iterator, Memento

Behavioral Design-Patterns

Page 109: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul STRATEGY

Page 110: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Alegerea la run-time a algoritmului/funcțieicare sa fie utilizata pentru procesarea unordate;

• Algoritmul se poate alege pe baza unorcondiții descrise la execuție in funcție de contextul datelor de intrare

• Clasa existenta nu trebuie sa fie modificata

• Utilizarea unei abordări tradiționale, prinincluderea in clasa a tuturor metodelorposibile, duce la ierarhii complexe ce sunt greude gestionat. Derivarea adaugă comportamentnou doar la compilare

STRATEGY - Problema

Page 111: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

STRATEGY - Diagrama

Page 112: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Strategy• clasa abstracta ce definește interfața obiectelor ce pot oferi noi

funcții/algoritmi de prelucrare;

• StrategieA, StrategieB• definește obiecte ce furnizează soluții pentru prelucrarea datelor;

• Obiect• gestionează o referința de tip IStrategy către obiectul care va oferi

funcția/algoritmul;

• Gestionează datele/contextual ce necesită prelucrare;

STRATEGY - Componente

Page 113: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Alegerea metodei de prelucrare a datelor se face dinamic, la run-time

• Este permisa definirea de noi algoritmi independent de modificareaclasei ce gestioneaza datele

• Nu impune limite privind un numar maxim de functii/algoritmi ve pot fi folositi

STRATEGY - Avantaje

Page 114: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul OBSERVER

Page 115: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

OBSERVER

acs.ase.ro [email protected] 115

http://umlcomics.blogspot.ro/2010/03/world-of-twisted-design-patterns.html

Page 116: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Exista componente care trebuie sa fie notificate la producerea unuieveniment

• Gestiunea evenimentelor la nivel de interfață

• Componentele se abonează/înregistrează la acel eveniment –modificare de stare/acțiune

• La producerea unui eveniment pot fi notificate mai multecomponente

OBSERVER - Problema

Page 117: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Externalizarea/delegarea funcțiilor către componente “observator” care dau soluții la anumite evenimente independent de proprietarulevenimentului

• Conceptul integrat în pattern-ul arhitectural Model View Controller(MVC)

• Implementează conceptul POO de loose coupling – obiectele suntinterconectate prin notificări și nu prin instanțieri de clase și apeluride metode

OBSERVER - Avantaje

Page 118: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

OBSERVER - Diagrama

Page 119: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Observabil• clasa abstracta ce definește interfața obiectelor gestionează evenimente si

care sunt observabile;

• ObservabilConcret• definește obiecte ce permit abonarea unor observatori;

• Observator• Interfață ce definește modalitatea in care sunt notificați observatorii;

• Permite gestiunea mai multor observatori

• ConcreteDecorator• Implementează funcții concrete care sunt executate in urma notificării;

OBSERVER - Componente

Page 120: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

2 modele de notificare a observatorului la modificarea stării:

• Push – obiectul trimite toate detaliile observatorului

• Pull – obiectul doar notifică observatorul și acesta cere datele cândare nevoie de ele

OBSERVER - Metode de comunicare

Page 121: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul CHAIN OF RESPONSABILITY

Page 122: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

CHAIN OF RESPONSABILITY - Problema

• Tratarea unui eveniment sau a unui obiectse face diferit in funcție de starea acestuia

• Gestiunea tuturor cazurilor ar implica o structură complexă care să verifice toatecazurile particulare

• Există legături de dependență între cazurilede utilizare: execuția unui caz poate implicaignorarea celorlalte sau tratareaurmătorului caz

acs.ase.ro [email protected] 122

http://www.leahy.com.au/

Page 123: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

CHAIN OF RESPONSABILITY - Diagrama

Page 124: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Handler• clasa abstracta ce definește interfața obiectelor ce gestionează cererea de

procesare a evenimentului;

• HandlerA• definește obiecte concrete ce formează secvența de tratare a notificării;

• Client• Generează evenimentul sau notifica primul obiect din secvența de obiecte;

CHAIN OF RESPONSABILITY - Componente

Page 125: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul STATE

Page 126: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

STATE - Problema

• Aplicația tratează un anumit eveniment diferit înfuncție de starea unui obiect

• Numărul de stări posibile poate să crească șitratarea unitară a acestora poate să influențezecomplexitatea soluției

• Modul de tratare a acțiunii este asociat uneianumite stări și este încapsulat într-un obiect de stare

acs.ase.ro [email protected] 126

Page 127: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

STATE - Diagrama

Page 128: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• State• clasa abstracta ce definește interfața obiectelor ce gestionează

implementarea unor acțiuni în funcție de stare;

• StareConcretaA, StareConcretaB• definește obiecte concrete ce implementează metodele de acțiunii aferente

stării respective;

• Context• gestionează referința de tip State și folosește metodele acesteia pentru a

implementa diferite prelucrări în funcție de stare;

STATE - Componente

Page 129: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

STATE Machine

acs.ase.ro [email protected] 129

https://codexplo.wordpress.com/2012/10/20/state-diagram-of-java-thread/

Ciclu de viata Java Thread

Page 130: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul COMMAND

Page 131: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMMAND - Problema

• Aplicația definește acțiuni parametrizabile ce pot fi executate mai târziu fără a solicita clientuluicunoașterea detaliile interne necesare execuției.

• Pentru a nu bloca clientul, se dorește ca aceste acțiunisă fie definite și trimise spre execuție fără a mai fi gestionate de client

• Se decuplează execuția întârziată (ulterioara) a uneiacțiuni de proprietar. Din punctul acestuia de vedere, acțiunea a fost deja trimisa spre execuție.

• Concept echivalent cu macro-urile. Obiectul de tip command încapsulează toate informațiile necesareexecuției acțiunii mai târziu de către responsabil

• Clientul este decuplat de cel ce executa acțiunea

acs.ase.ro [email protected] 131

Page 132: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMMAND - Diagrama

Page 133: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Comanda• Definește interfața necesară execuției acțiunii + alte detalii;

• ComandaConcreta• Extinde interfața comenzii si implementează metoda prin care este controlat

Receiver-ul• Reprezintă legătura dintre Receiver si acțiune

• Client• Creează un obiect ComandaConcreta si setează Receiver-ul acestuia;

• Invoker (ManagerComenzi)• Creează comanda și cere îndeplinirea acțiunii;

• Receiver (Executant)• Obiectul care este responsabil cu execuția acțiunii;

COMMAND - Componente

Page 134: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

COMMAND - Scenariu

ACME Inc. dezvolta o soluție software pentru un restaurant, astfel încâtchelnerul să poată prelua comenzile direct pe telefonul mobil. Comenzile sunt preluate de la client și ele sunt create pe loc, fiindautomat alocat bucătarul specializat pe acel fel de mâncare, ingredientele folosite si alte cerințe speciale ale clientului. Acestedetalii sunt puse de aplicație, fără a fi necesara intervenția chelneruluicare doar selectează felul de mâncare solicitat. Comenzile sunt trimisebucătarilor la finalizarea comenzii pentru masa respectiva, urmând săfie executate in funcție de gradul de încărcare al fiecărui bucătar.

acs.ase.ro [email protected] 134

Page 135: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul TEMPLATE METHOD

Page 136: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Implementarea unui algoritm presupune o secvență predefinita si fixa de pași

• Metoda ce definește schema algoritmului –metoda template

• Pot fi extinse/modificate metodele care implementează fiecare pas însă schema algoritmului nu este modificabilă

• Implementează principiul Hollywood: "Don't call us, we'll call you.“

• Metodele concrete de definesc pașii algoritmuluisunt apelate de metoda template

TEMPLATE METHOD - Problema

Page 137: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

TEMPLATE METHOD - Diagrama

Page 138: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

TEMPLATE - Componente

• TemplateTestare• Clasa abstracta ce definește interfața unui obiect de tip TemplateTestare si

modalitatea în care sunt executate metodele

• Conține o metod template ce implementează șablonul de execuție a interfețeiși care nu se supradefinește

• TestareJUnit• Definește interfața obiectului într-o situație concretă

• TestareNUnit• Definește interfața obiectului într-o situație concretă

acs.ase.ro [email protected] 138

Page 139: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Modele comportamentale

Modelul MEMENTO

Page 140: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

MEMENTO - Problema

• Aplicația trebuie sa permită salvarea stării unuiobiect

• Imaginile stării obiectului pentru diferitemomente sunt gestionate separat

• Obiectul își poate restaura starea pe baza uneiimagini anterioare

acs.ase.ro [email protected] 140

Page 141: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

MEMENTO - Diagrama

Page 142: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

• Memento• Gestionează starea interna a obiectului Originator pentru un anumit moment;

Este creat de Originator si este gestionat de Caretaker

• Originator• Obiectul a cărui stare este urmărita; Poate genera un Memento cu starea lui la

momentul respective. Poate sa își reface starea pe baza unui Memento

• ManagerStari (Caretaker)

• Gestionează obiectele de tip Memento fără a avea acces pe conținutulacestora;

MEMENTO - Componente

Page 143: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Recapitulare

• Creaționale: • Factory – creează obiecte dintr-o familie• Builder – creează obiecte setând anumite atribute• Singleton – creează o unică instanță• Prototype – creeaza clone ale unui obiect fara a se baza pe constructor

• Structurale:• Adapter – adaptează un API (o interfață) la altul• Composite – gestionează o ierarhie de obiecte• Decorator – atribuie la run-time funcționalitate nouă unui obiect existent• Façade – simplifica execuția (apelarea) unui scenariu complex• Flyweight – gestionează eficient mai multe instanțe (clone) ale unui set redus de

modele

acs.ase.ro [email protected] 143

Page 144: Design patterns - ASE Bucuresti CTS Design... · •Design Patterns Implementation acs.ase.ro catalin.boja@ie ... •Allow easier understanding of the source code / architecture

Recapitulare

• Comportamentale:• Strategy – schimba la run-time funcția executată

• Observer – execută o acțiune când are loc un eveniment sau un observabil îșischimba starea

• Chain of Responsibility – gestionează o secvență de acțiuni ce pot procesa un eveniment sau un obiect

• Command – gestionează realizarea întârziată a unei acțiuni

• Memento – gestionează stările anterioare ale unui obiect

• State – stabilește tipul acțiunii în funcție de starea obiectului

• Template – gestionează un șablon fix de acțiuni

acs.ase.ro [email protected] 144