SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
Java course - IAG0040




             Design Patterns




Anton Keks                           2011
The Increasing Complexity

     Complexity of software systems
                                          Time

     New programming paradigms
     Higher level of abstraction
     HW Assembler    Structural P. (DSL, AOP?)
       CPUs  Procedural P.      OOP            ...

Java course – IAG0040                          Lecture 11
Anton Keks                                         Slide 2
The emerge of OOP
 ●
     Response to complexity
 ●   Software crisis: difficulty of writing correct,
     understandable, and verifiable programs

 ●
     Emphasizes modularity & reusability
 ●
     Solves the “Tramp Data” problem
 ●
     Closer to the Real World
 ●
     Program == cooperating objects,
     not a list of instructions
Java course – IAG0040                           Lecture 11
Anton Keks                                          Slide 3
What are design patterns?
 ●
     Anywhere in the world you can find recurring
     patterns
 ●
     Design patterns
     –   are building blocks of a system's architecture
     –   are recurring solutions to design problems
         that you see over
     –   identify and specify abstractions that are
         above the level of single classes and instances


Java course – IAG0040                             Lecture 11
Anton Keks                                            Slide 4
Where do they come from?
 ●
     First referenced in early 80's,
     with the emerge of OOP
 ●   Formally defined in 1994 in the GOF book
     (even before Java!)
 ●
     Hundreds more have been identified since
     then

 ●
     Are usually discovered (through pattern-
     mining) rather than invented
Java course – IAG0040                           Lecture 11
Anton Keks                                          Slide 5
GOF (Gang of Four) book
                        ●
                            Title: Design Patterns:
                            Elements of Reusable
                            Object-Oriented
                            Software
                        ●
                            Is the first and essential
                            book on patterns
                        ●
                            Patterns are well
                            classified and described
                        ●   Every professional
                            software developer must
                            know them
Java course – IAG0040                           Lecture 11
Anton Keks                                          Slide 6
MVC
 ●
     Model-View-Controller
 ●
     One of the first patterns, comes from Smalltalk language
 ●
     Is a “best practice” of splitting GUI applications into
      –   Model - holds/stores data and provides data access interface
      –   View - displays data to the user obtained from the model
      –   Controller - manipulates the model, selects appropriate views
 ●   Therefore, the code consists of three decoupled layers, which
     can work together or independently
 ●   Any of the layers can be modified/rewritten without
     modifications to other layers

Java course – IAG0040                                          Lecture 11
Anton Keks                                                         Slide 7
Pattern classification
●   The GOF book defines 3 major types of patterns:
    –   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.
    –   Structural patterns help you compose groups of objects
        into larger structures, such as complex user interfaces
        or accounting data.
    –   Behavioral patterns help you define the
        communication between objects in your system and
        how the flow is controlled in a complex program.

Java course – IAG0040                                    Lecture 11
Anton Keks                                                   Slide 8
Anti-patterns
 ●
     This term is also widely used to define certain
     patterns, which should be avoided in software design
 ●
     Anti-patterns (aka pitfalls) are commonly reinvented
     bad solutions to problems
 ●
     Knowing anti-patterns is as important as knowing
     patterns
 ●   Another term used in Agile Software Development is
     code smell (eliminated by refactoring)
 ●
     See Wikipedia articles on both Anti-pattern and
     Code smell for more info and examples
Java course – IAG0040                              Lecture 11
Anton Keks                                             Slide 9
Software Design vs Architecture
 ●
     Software design is the structure of code and
     relations between its elements (classes)
 ●   Software architecture is the same as software
     design, but used when people want to make it
     look important (after Martin Fowler)
     –   Architecture is the part of design that is
         difficult to change
     –   Therefore it is undesired :-)


Java course – IAG0040                             Lecture 11
Anton Keks                                          Slide 10
Some design considerations
 ●
     Thinking about design is very important at all
     stages during a project. If it needs corrections
     then refactoring should be used
 ●
     Consistent API and loosely coupled code are
     very important - they make changes easy
 ●
     Unit tests and TDD help a lot
 ●
     Design patterns help make your design better
     and more understandable to others


Java course – IAG0040                           Lecture 11
Anton Keks                                        Slide 11
General concepts of design
 ●
     Fundamental reason for patterns: keep classes
     separated, prevent them from knowing too much
     about each other
 ●
     Abstract classes and interfaces are major tools
 ●
     Program to interfaces, not to implementations
 ●   Prefer object composition to inheritance; it usually
     results in cleaner code (this is simply a construction
     of objects that contain others)
     –   Delegation may be used for reusing “parent” behavior


Java course – IAG0040                                  Lecture 11
Anton Keks                                               Slide 12
Iterator
 ●
     Behavioral pattern, synonym: Cursor
 ●
     You already know it from the Collections API!
 ●
     Iterator provides a way for accessing elements of an
     aggregate object sequentially without exposing its
     underlying representation
 ●
     Iterator is a special object provided by an aggregate
     object for holding of iteration state
     –   better than if aggregate objects change their state during
         iteration (e.g. provide their own next() methods)
     –   better than index-based element access - hides
         implementation details
     –   several iterators may be used at once on the same data
Java course – IAG0040                                          Lecture 11
Anton Keks                                                       Slide 13
Lazy Initialization
 ●
     The idea is to initialize “expensive” objects on demand, e.g.
     only when they are accessed (this is sometimes referred to as
     “caching”)
      –   if expensive object is never accessed then it is never created
 ●   If initialization takes time and several threads access the object,
     then synchronization is needed
 ●   Double-checked locking is a clever (but broken) trick:
      –   public Object getExpensiveObject() {
             if (instance == null) {
                 synchronized (this) {
                    if (instance == null)
                        instance = new ...
                 }
             }
             return instance;
          }
Java course – IAG0040                                                Lecture 11
Anton Keks                                                             Slide 14
Singleton
 ●
     Creational pattern, sometimes uses lazy initialization
 ●
     Ensures a class has only one instance, and provides
     global access point to it
 ●   public class Singleton {
        private Singleton() {} // private constructor
        private static Singleton uniqueInstance =
                                  new Singleton();
        public static Singleton getInstance() {
           return uniqueInstance;
           // can be lazily initialized
        }
     }



Java course – IAG0040                                Lecture 11
Anton Keks                                             Slide 15
Singleton (2)
 ●   Better than global variables (controlled access,
     doesn't pollute namespace)
 ●   More flexible than class operations (static
     methods): can be polymorphic and subclassed,
     permits easy design changes, etc
 ●   Disadvantages: may result in coupled code, if
     used directly too much. Difficult to mock in unit
     tests
 ●   (better alternative – use singletons in an IoC
     container, like PicoContainer or Spring)
Java course – IAG0040                            Lecture 11
Anton Keks                                         Slide 16
Factory Method
 ●   Creational pattern, synonyms: Factory, Virtual
     Constructor
 ●   Defines an interface for creating an object of
     particular abstract type, but lets subclasses decide
     which concrete class to instantiate
 ●   Used by many modern frameworks and APIs (e.g.
     SAXParserFactory)
 ●   public class BulldogFactory implements DogFactory {
        public Dog createDog() { return new Bulldog(); } }
 ●   public class DachshundFactory implements DogFactory {
        public Dog createDog() {
           return new Dachshund(); } }
Java course – IAG0040                                 Lecture 11
Anton Keks                                              Slide 17
Factory Method (2)
 ●
     Allows writing of polymorphic code that can work
     with different implementations of interfaces without
     any direct references to them, eliminates hardcoding
     of implementation class names
 ●   The method must be non-static, if you want to override
     it in a superclass of factory
 ●   Variation: factory method can be static and decide
     itself what to instantiate
     –   using configuration
     –   with the help of parameters

Java course – IAG0040                                Lecture 11
Anton Keks                                             Slide 18
Abstract Factory
 ●
     Creational pattern, synonym: Kit
 ●
     Provides an interface for creating families of related
     or dependent objects without specifying their
     concrete classes
 ●
     Abstract Factory is similar to Factory Method with the
     exception that methods are never static and
     Factories are always subclassed in order to return
     different sets of instances




Java course – IAG0040                                Lecture 11
Anton Keks                                             Slide 19
Abstract Factory (2)
 ●
     Example: GUI toolkit with Factories for creation of
     widgets with different look and feel
 ●   public interface AbstractWidgetFactory {
        public Button createButton();
        public ScrollBar createScrollBar();
     }

     public class MotifLookAndFeelWidgetFactory
        implements AbstractWidgetFactory {
        ...
     }




Java course – IAG0040                               Lecture 11
Anton Keks                                            Slide 20
Builder
 ●
     Creational pattern
 ●
     Eliminates 'telescoping' constructors
     –   without sacrificing immutability
     –   has all advantages of Factory
 ●
     Create Builder inner static class with methods returning
     'this' and build() method returning the class instance
 ●   Pizza pizza = new Pizza.Builder().
       withOnion().doubleCheese().build();
 ●
     Very readable, better than infinite number of constructors
     with boolean or numeric arguments, or setters

Java course – IAG0040                                   Lecture 11
Anton Keks                                                Slide 21
Common structural patterns

 ● Decorator
 ● Adapter


 ●
   Composite
 ● (Proxy)




Java course – IAG0040            Lecture 11
Anton Keks                         Slide 22
Decorator
 ●   Structural pattern, synonym: Wrapper
 ●   Attach additional responsibilities to an object
     dynamically.
 ●   Decorators provide a flexible alternative to
     subclassing for extending functionality
 ●   Useful for adding responsibilities dynamically to
     objects, not classes.
 ●
     Decorator must have the same interface as the
     decorated object.

Java course – IAG0040                               Lecture 11
Anton Keks                                            Slide 23
Decorator (2)
 ●
     Decorator delegates all method calls to wrapped
     instance and does something else before or after.
     Every object can be decorated several times.
 ●   BufferedInputStream decorates any
     InputStream
 ●   public class LoggingConnection implements Connection {
        private Connection conn;
        ...
        public boolean isActive() {
            System.out.println(“isActive was called!”);
            return conn.isActive();
        }
        ...
     }

Java course – IAG0040                                 Lecture 11
Anton Keks                                              Slide 24
Adapter
 ●
     Structural pattern, synonym: Wrapper
 ●   Converts the interface of a class into another
     interface clients expect
 ●
     Adapter lets classes work together that
     couldn't otherwise because of incompatible
     interfaces




Java course – IAG0040                          Lecture 11
Anton Keks                                       Slide 25
Adapter (2)
 ●
     In other words, Adapter just translates requests to
     another API of the wrapped class
 ●
     Examples
     –   InputStreamReader adapts an InputStream to
         the Reader interface
     –   Arrays.asList() represents java arrays as List
         instances
     –   Collections.enumeration() represents
         Iterators as Enumerations


Java course – IAG0040                                Lecture 11
Anton Keks                                             Slide 26
Composite
 ●
     Structural pattern, similar to Decorator
 ●   Composes objects into tree structures to
     represent part-whole hierarchies
 ●
     Composite lets clients treat individual objects
     and compositions of objects uniformly




Java course – IAG0040                           Lecture 11
Anton Keks                                        Slide 27
Composite (2)
 ●   Example: in a GUI toolkit, a Window is a
     composite of other Widgets, while is a Widget
     itself
 ●   Many GUI toolkits have base classes named
     Composite, which can have a layout manager
     assigned and an arbitrary number of child
     Composites
 ●   SequenceInputStream is a composite of many
     InputStreams


Java course – IAG0040                           Lecture 11
Anton Keks                                        Slide 28
Proxy
 ●
     Decorator, Adapter, and Composite
     –   any of them can be called 'Proxy'
 ●
     Proxy is a class, functioning as an interface to
     another thing
 ●
     In a more specific sense (Virtual Proxy):
     wrapping classes can
     –   control access to wrapped objects
     –   lazily initialize the delegates inside them


Java course – IAG0040                                  Lecture 11
Anton Keks                                               Slide 29
Strategy
●
    Behavioral pattern, synonym: Policy
●
    Defines a family of algorithms, encapsulates each one,
    and makes them interchangeable; eliminates
    conditions from the code (GoF)
●
    Capture the abstraction in an interface, bury
    implementation details in derived classes
●   Strategy lets the algorithm vary independently from
    clients that use it
    –   Algorithms can be changed on-the-fly at runtime


Java course – IAG0040                               Lecture 11
Anton Keks                                            Slide 30
Strategy (2)
 ●
     Strategy pattern allows adding of new algorithms
     easily and/or dynamically
 ●
     Participants:
     –   Strategy – an interface or abstract class of all
         strategies
     –   ConcreteStrategy – each is a different
         implementation of Strategy
     –   Context – a class, initialized to use and maintain a
         ConcreteStrategy, can provide additional (context
         specific) data to it

Java course – IAG0040                                   Lecture 11
Anton Keks                                                Slide 31
State
 ●
     Behavioral pattern, similar to Strategy
 ●   Each “Strategy” is one of the states of the
     Context
     –   Strategy usually represents a single abstraction
     –   each State can implement several behaviors
         (different actions, methods)
     –   State interface may as well provide methods for
         transitions in order to implement a Finite State
         Machine

Java course – IAG0040                                 Lecture 11
Anton Keks                                              Slide 32
Façade
 ●   Structural pattern
 ●
     Provides a unified interface to a set of interfaces in subsystem
 ●   Facade defines a higher-level interface that makes the subsystem
     easier to use
 ●   Structuring a system into subsystems reduces complexity. Then
     subsystems can communicate only through Facades, while using
     their own lower-level interfaces internally. This reduces coupling
 ●   Example: consider internals of a compiler: it can have classes like
     Scanner, Parser, ProgramNode, BytecodeStream, etc, but externally
     you use the Facade class named Compiler, which simply takes input
     file and produces an output file
 ●
     Facade just delegates requests to appropriate subsystem classes, it
     doesn't do anything itself
Java course – IAG0040                                             Lecture 11
Anton Keks                                                          Slide 33
Prototype
 ●   Creational pattern
 ●
     Specifies the kind of objects to create using the
     prototypical instance
      –   creates new objects by copying (cloning) the prototype
 ●   Allows having an initialized reference instance of some
     abstract class, then it can be cloned or recreated with
     reflection API for creation of new objects
 ●   Useful when creating new instances is too complex (and
     slow) or less convenient than cloning
 ●   Convenient for implementation of plug-in architectures,
     where implementations may be added/removed dynamically

Java course – IAG0040                                      Lecture 11
Anton Keks                                                   Slide 34
Observer
 ●
     Behavioral pattern, synonym: Publish-
     Subscribe
 ●   Defines a one-to-many dependency between
     objects so that when one object changes
     state, all its dependents are notified and
     updated automatically
 ●
     Provides decoupled classes, which can work
     together or independently


Java course – IAG0040                        Lecture 11
Anton Keks                                     Slide 35
Observer (2)
 ●
     Participants:
     –   Subject (Observable) – the data to observe
     –   Observer – an updating interface for objects, which
         are notified
     –   ConcreteSubject – sends notifications to all
         registered ConcreteObservers
     –   ConcreteObserver – knows about ConcreteSubject,
         updates itself on notifications
 ●   Java provides both Observable abstract class and
     Observer interface
Java course – IAG0040                                   Lecture 11
Anton Keks                                                Slide 36

Weitere ähnliche Inhalte

Was ist angesagt?

Jdbc architecture and driver types ppt
Jdbc architecture and driver types pptJdbc architecture and driver types ppt
Jdbc architecture and driver types pptkamal kotecha
 
Java Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | EdurekaJava Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | EdurekaEdureka!
 
Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General IntroductionAsma CHERIF
 
The Singleton Pattern Presentation
The Singleton Pattern PresentationThe Singleton Pattern Presentation
The Singleton Pattern PresentationJAINIK PATEL
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questionsUmar Ali
 
Design Pattern - Singleton Pattern
Design Pattern - Singleton PatternDesign Pattern - Singleton Pattern
Design Pattern - Singleton PatternMudasir Qazi
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design PatternJaswant Singh
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan GoleChetan Gole
 
Iterator Design Pattern
Iterator Design PatternIterator Design Pattern
Iterator Design PatternVarun Arora
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternMudasir Qazi
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 

Was ist angesagt? (20)

Jdbc architecture and driver types ppt
Jdbc architecture and driver types pptJdbc architecture and driver types ppt
Jdbc architecture and driver types ppt
 
Java Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | EdurekaJava Design Patterns Tutorial | Edureka
Java Design Patterns Tutorial | Edureka
 
Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General Introduction
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
The Singleton Pattern Presentation
The Singleton Pattern PresentationThe Singleton Pattern Presentation
The Singleton Pattern Presentation
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questions
 
Facade pattern
Facade patternFacade pattern
Facade pattern
 
Proxy Design Pattern
Proxy Design PatternProxy Design Pattern
Proxy Design Pattern
 
Design Pattern - Singleton Pattern
Design Pattern - Singleton PatternDesign Pattern - Singleton Pattern
Design Pattern - Singleton Pattern
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan Gole
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
Design patterns tutorials
Design patterns tutorialsDesign patterns tutorials
Design patterns tutorials
 
Iterator Design Pattern
Iterator Design PatternIterator Design Pattern
Iterator Design Pattern
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method Pattern
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
 

Andere mochten auch

Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK ExamplesEnder Aydin Orak
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Patternguy_davis
 
Design Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The WorldDesign Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The WorldSaurabh Moody
 
Design Patterns
Design PatternsDesign Patterns
Design Patternssoms_1
 
PATTERNS05 - Guidelines for Choosing a Design Pattern
PATTERNS05 - Guidelines for Choosing a Design PatternPATTERNS05 - Guidelines for Choosing a Design Pattern
PATTERNS05 - Guidelines for Choosing a Design PatternMichael Heron
 
Factory design pattern
Factory design patternFactory design pattern
Factory design patternFarhad Safarov
 
Design Pattern - Introduction
Design Pattern - IntroductionDesign Pattern - Introduction
Design Pattern - IntroductionMudasir Qazi
 
Design Patterns Part1
Design Patterns  Part1Design Patterns  Part1
Design Patterns Part1Tom Chen
 
Proxy & adapter pattern
Proxy & adapter patternProxy & adapter pattern
Proxy & adapter patternbabak danyal
 
Adapter design-pattern2015
Adapter design-pattern2015Adapter design-pattern2015
Adapter design-pattern2015Vic Tarchenko
 
Design Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory PatternDesign Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory PatternMudasir Qazi
 
Design patterns structuralpatterns(theadapterpattern)
Design patterns structuralpatterns(theadapterpattern)Design patterns structuralpatterns(theadapterpattern)
Design patterns structuralpatterns(theadapterpattern)APU
 
Floor plan for cashew factory by sotonye anga
Floor plan for cashew factory by sotonye angaFloor plan for cashew factory by sotonye anga
Floor plan for cashew factory by sotonye angaSotonye anga
 
Performance management system slide
Performance management system slidePerformance management system slide
Performance management system slideraizanamiza
 
The Decorator Pattern
The Decorator PatternThe Decorator Pattern
The Decorator PatternAkshat Vig
 
The 23 gof design patterns in java ,the summary
The 23 gof design patterns in java ,the summaryThe 23 gof design patterns in java ,the summary
The 23 gof design patterns in java ,the summaryachraf_ing
 

Andere mochten auch (20)

Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK Examples
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Design Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The WorldDesign Patterns For 70% Of Programmers In The World
Design Patterns For 70% Of Programmers In The World
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)
 
PATTERNS05 - Guidelines for Choosing a Design Pattern
PATTERNS05 - Guidelines for Choosing a Design PatternPATTERNS05 - Guidelines for Choosing a Design Pattern
PATTERNS05 - Guidelines for Choosing a Design Pattern
 
Factory design pattern
Factory design patternFactory design pattern
Factory design pattern
 
Design Pattern - Introduction
Design Pattern - IntroductionDesign Pattern - Introduction
Design Pattern - Introduction
 
Design Patterns Part1
Design Patterns  Part1Design Patterns  Part1
Design Patterns Part1
 
Proxy & adapter pattern
Proxy & adapter patternProxy & adapter pattern
Proxy & adapter pattern
 
Adapter design-pattern2015
Adapter design-pattern2015Adapter design-pattern2015
Adapter design-pattern2015
 
Anti patterns part 1
Anti patterns part 1Anti patterns part 1
Anti patterns part 1
 
Design Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory PatternDesign Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory Pattern
 
Design patterns structuralpatterns(theadapterpattern)
Design patterns structuralpatterns(theadapterpattern)Design patterns structuralpatterns(theadapterpattern)
Design patterns structuralpatterns(theadapterpattern)
 
Floor plan for cashew factory by sotonye anga
Floor plan for cashew factory by sotonye angaFloor plan for cashew factory by sotonye anga
Floor plan for cashew factory by sotonye anga
 
William Bronchick Coaching
William Bronchick CoachingWilliam Bronchick Coaching
William Bronchick Coaching
 
Performance management system slide
Performance management system slidePerformance management system slide
Performance management system slide
 
The Decorator Pattern
The Decorator PatternThe Decorator Pattern
The Decorator Pattern
 
Adapter pattern
Adapter patternAdapter pattern
Adapter pattern
 
The 23 gof design patterns in java ,the summary
The 23 gof design patterns in java ,the summaryThe 23 gof design patterns in java ,the summary
The 23 gof design patterns in java ,the summary
 

Ähnlich wie Java Course 11: Design Patterns

Java Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateJava Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateAnton Keks
 
Java Course 6: Introduction to Agile
Java Course 6: Introduction to AgileJava Course 6: Introduction to Agile
Java Course 6: Introduction to AgileAnton Keks
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIAnton Keks
 
Java Standard edition(Java ) programming Basics for beginner's
Java Standard edition(Java ) programming Basics  for beginner'sJava Standard edition(Java ) programming Basics  for beginner's
Java Standard edition(Java ) programming Basics for beginner'smomin6
 
Session 02 - Elements of Java Language
Session 02 - Elements of Java LanguageSession 02 - Elements of Java Language
Session 02 - Elements of Java LanguagePawanMM
 
Application Development Using Java - DIYComputerScience Course
Application Development Using Java - DIYComputerScience CourseApplication Development Using Java - DIYComputerScience Course
Application Development Using Java - DIYComputerScience Courseparag
 
Elements of Java Language
Elements of Java Language Elements of Java Language
Elements of Java Language Hitesh-Java
 
Object Oriented Methodology in Java (Lecture-1)
Object Oriented Methodology in Java (Lecture-1)Object Oriented Methodology in Java (Lecture-1)
Object Oriented Methodology in Java (Lecture-1)Md. Mujahid Islam
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesBalamuruganV28
 
Java Course 1: Introduction
Java Course 1: IntroductionJava Course 1: Introduction
Java Course 1: IntroductionAnton Keks
 
OOP with Java
OOP with JavaOOP with Java
OOP with JavaOmegaHub
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascriptAyush Sharma
 
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdf
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdfIntroduction To Java Programming_ A Beginner's Guide_16_06_23.pdf
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdfvibinjackson
 
Eclipse Training - Introduction
Eclipse Training - IntroductionEclipse Training - Introduction
Eclipse Training - IntroductionLuca D'Onofrio
 

Ähnlich wie Java Course 11: Design Patterns (20)

Java Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateJava Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, Hibernate
 
Java Course 6: Introduction to Agile
Java Course 6: Introduction to AgileJava Course 6: Introduction to Agile
Java Course 6: Introduction to Agile
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUI
 
Core Java Basics
Core Java BasicsCore Java Basics
Core Java Basics
 
JavaFX in Action Part I
JavaFX in Action Part IJavaFX in Action Part I
JavaFX in Action Part I
 
Chapter 1
Chapter 1Chapter 1
Chapter 1
 
Java Standard edition(Java ) programming Basics for beginner's
Java Standard edition(Java ) programming Basics  for beginner'sJava Standard edition(Java ) programming Basics  for beginner's
Java Standard edition(Java ) programming Basics for beginner's
 
Session 02 - Elements of Java Language
Session 02 - Elements of Java LanguageSession 02 - Elements of Java Language
Session 02 - Elements of Java Language
 
Application Development Using Java - DIYComputerScience Course
Application Development Using Java - DIYComputerScience CourseApplication Development Using Java - DIYComputerScience Course
Application Development Using Java - DIYComputerScience Course
 
Elements of Java Language
Elements of Java Language Elements of Java Language
Elements of Java Language
 
Object Oriented Methodology in Java (Lecture-1)
Object Oriented Methodology in Java (Lecture-1)Object Oriented Methodology in Java (Lecture-1)
Object Oriented Methodology in Java (Lecture-1)
 
Core java
Core javaCore java
Core java
 
Object Oriented Programming All Unit Notes
Object Oriented Programming All Unit NotesObject Oriented Programming All Unit Notes
Object Oriented Programming All Unit Notes
 
Java Course 1: Introduction
Java Course 1: IntroductionJava Course 1: Introduction
Java Course 1: Introduction
 
OOP with Java
OOP with JavaOOP with Java
OOP with Java
 
Design patterns in javascript
Design patterns in javascriptDesign patterns in javascript
Design patterns in javascript
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdf
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdfIntroduction To Java Programming_ A Beginner's Guide_16_06_23.pdf
Introduction To Java Programming_ A Beginner's Guide_16_06_23.pdf
 
Eclipse Training - Introduction
Eclipse Training - IntroductionEclipse Training - Introduction
Eclipse Training - Introduction
 
JAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdfJAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdf
 

Mehr von Anton Keks

Being a professional software tester
Being a professional software testerBeing a professional software tester
Being a professional software testerAnton Keks
 
Java Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingJava Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingAnton Keks
 
Java Course 12: XML & XSL, Web & Servlets
Java Course 12: XML & XSL, Web & ServletsJava Course 12: XML & XSL, Web & Servlets
Java Course 12: XML & XSL, Web & ServletsAnton Keks
 
Java Course 10: Threads and Concurrency
Java Course 10: Threads and ConcurrencyJava Course 10: Threads and Concurrency
Java Course 10: Threads and ConcurrencyAnton Keks
 
Java Course 9: Networking and Reflection
Java Course 9: Networking and ReflectionJava Course 9: Networking and Reflection
Java Course 9: Networking and ReflectionAnton Keks
 
Java Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and StreamsJava Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and StreamsAnton Keks
 
Java Course 7: Text processing, Charsets & Encodings
Java Course 7: Text processing, Charsets & EncodingsJava Course 7: Text processing, Charsets & Encodings
Java Course 7: Text processing, Charsets & EncodingsAnton Keks
 
Java Course 5: Enums, Generics, Assertions
Java Course 5: Enums, Generics, AssertionsJava Course 5: Enums, Generics, Assertions
Java Course 5: Enums, Generics, AssertionsAnton Keks
 
Java Course 4: Exceptions & Collections
Java Course 4: Exceptions & CollectionsJava Course 4: Exceptions & Collections
Java Course 4: Exceptions & CollectionsAnton Keks
 
Java Course 3: OOP
Java Course 3: OOPJava Course 3: OOP
Java Course 3: OOPAnton Keks
 
Java Course 2: Basics
Java Course 2: BasicsJava Course 2: Basics
Java Course 2: BasicsAnton Keks
 
Choose a pattern for a problem
Choose a pattern for a problemChoose a pattern for a problem
Choose a pattern for a problemAnton Keks
 
Simple Pure Java
Simple Pure JavaSimple Pure Java
Simple Pure JavaAnton Keks
 
Database Refactoring
Database RefactoringDatabase Refactoring
Database RefactoringAnton Keks
 
Scrum is not enough - being a successful agile engineer
Scrum is not enough - being a successful agile engineerScrum is not enough - being a successful agile engineer
Scrum is not enough - being a successful agile engineerAnton Keks
 
Being a Professional Software Developer
Being a Professional Software DeveloperBeing a Professional Software Developer
Being a Professional Software DeveloperAnton Keks
 

Mehr von Anton Keks (16)

Being a professional software tester
Being a professional software testerBeing a professional software tester
Being a professional software tester
 
Java Course 13: JDBC & Logging
Java Course 13: JDBC & LoggingJava Course 13: JDBC & Logging
Java Course 13: JDBC & Logging
 
Java Course 12: XML & XSL, Web & Servlets
Java Course 12: XML & XSL, Web & ServletsJava Course 12: XML & XSL, Web & Servlets
Java Course 12: XML & XSL, Web & Servlets
 
Java Course 10: Threads and Concurrency
Java Course 10: Threads and ConcurrencyJava Course 10: Threads and Concurrency
Java Course 10: Threads and Concurrency
 
Java Course 9: Networking and Reflection
Java Course 9: Networking and ReflectionJava Course 9: Networking and Reflection
Java Course 9: Networking and Reflection
 
Java Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and StreamsJava Course 8: I/O, Files and Streams
Java Course 8: I/O, Files and Streams
 
Java Course 7: Text processing, Charsets & Encodings
Java Course 7: Text processing, Charsets & EncodingsJava Course 7: Text processing, Charsets & Encodings
Java Course 7: Text processing, Charsets & Encodings
 
Java Course 5: Enums, Generics, Assertions
Java Course 5: Enums, Generics, AssertionsJava Course 5: Enums, Generics, Assertions
Java Course 5: Enums, Generics, Assertions
 
Java Course 4: Exceptions & Collections
Java Course 4: Exceptions & CollectionsJava Course 4: Exceptions & Collections
Java Course 4: Exceptions & Collections
 
Java Course 3: OOP
Java Course 3: OOPJava Course 3: OOP
Java Course 3: OOP
 
Java Course 2: Basics
Java Course 2: BasicsJava Course 2: Basics
Java Course 2: Basics
 
Choose a pattern for a problem
Choose a pattern for a problemChoose a pattern for a problem
Choose a pattern for a problem
 
Simple Pure Java
Simple Pure JavaSimple Pure Java
Simple Pure Java
 
Database Refactoring
Database RefactoringDatabase Refactoring
Database Refactoring
 
Scrum is not enough - being a successful agile engineer
Scrum is not enough - being a successful agile engineerScrum is not enough - being a successful agile engineer
Scrum is not enough - being a successful agile engineer
 
Being a Professional Software Developer
Being a Professional Software DeveloperBeing a Professional Software Developer
Being a Professional Software Developer
 

Kürzlich hochgeladen

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Java Course 11: Design Patterns

  • 1. Java course - IAG0040 Design Patterns Anton Keks 2011
  • 2. The Increasing Complexity Complexity of software systems Time New programming paradigms Higher level of abstraction HW Assembler Structural P. (DSL, AOP?) CPUs Procedural P. OOP ... Java course – IAG0040 Lecture 11 Anton Keks Slide 2
  • 3. The emerge of OOP ● Response to complexity ● Software crisis: difficulty of writing correct, understandable, and verifiable programs ● Emphasizes modularity & reusability ● Solves the “Tramp Data” problem ● Closer to the Real World ● Program == cooperating objects, not a list of instructions Java course – IAG0040 Lecture 11 Anton Keks Slide 3
  • 4. What are design patterns? ● Anywhere in the world you can find recurring patterns ● Design patterns – are building blocks of a system's architecture – are recurring solutions to design problems that you see over – identify and specify abstractions that are above the level of single classes and instances Java course – IAG0040 Lecture 11 Anton Keks Slide 4
  • 5. Where do they come from? ● First referenced in early 80's, with the emerge of OOP ● Formally defined in 1994 in the GOF book (even before Java!) ● Hundreds more have been identified since then ● Are usually discovered (through pattern- mining) rather than invented Java course – IAG0040 Lecture 11 Anton Keks Slide 5
  • 6. GOF (Gang of Four) book ● Title: Design Patterns: Elements of Reusable Object-Oriented Software ● Is the first and essential book on patterns ● Patterns are well classified and described ● Every professional software developer must know them Java course – IAG0040 Lecture 11 Anton Keks Slide 6
  • 7. MVC ● Model-View-Controller ● One of the first patterns, comes from Smalltalk language ● Is a “best practice” of splitting GUI applications into – Model - holds/stores data and provides data access interface – View - displays data to the user obtained from the model – Controller - manipulates the model, selects appropriate views ● Therefore, the code consists of three decoupled layers, which can work together or independently ● Any of the layers can be modified/rewritten without modifications to other layers Java course – IAG0040 Lecture 11 Anton Keks Slide 7
  • 8. Pattern classification ● The GOF book defines 3 major types of patterns: – 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. – Structural patterns help you compose groups of objects into larger structures, such as complex user interfaces or accounting data. – Behavioral patterns help you define the communication between objects in your system and how the flow is controlled in a complex program. Java course – IAG0040 Lecture 11 Anton Keks Slide 8
  • 9. Anti-patterns ● This term is also widely used to define certain patterns, which should be avoided in software design ● Anti-patterns (aka pitfalls) are commonly reinvented bad solutions to problems ● Knowing anti-patterns is as important as knowing patterns ● Another term used in Agile Software Development is code smell (eliminated by refactoring) ● See Wikipedia articles on both Anti-pattern and Code smell for more info and examples Java course – IAG0040 Lecture 11 Anton Keks Slide 9
  • 10. Software Design vs Architecture ● Software design is the structure of code and relations between its elements (classes) ● Software architecture is the same as software design, but used when people want to make it look important (after Martin Fowler) – Architecture is the part of design that is difficult to change – Therefore it is undesired :-) Java course – IAG0040 Lecture 11 Anton Keks Slide 10
  • 11. Some design considerations ● Thinking about design is very important at all stages during a project. If it needs corrections then refactoring should be used ● Consistent API and loosely coupled code are very important - they make changes easy ● Unit tests and TDD help a lot ● Design patterns help make your design better and more understandable to others Java course – IAG0040 Lecture 11 Anton Keks Slide 11
  • 12. General concepts of design ● Fundamental reason for patterns: keep classes separated, prevent them from knowing too much about each other ● Abstract classes and interfaces are major tools ● Program to interfaces, not to implementations ● Prefer object composition to inheritance; it usually results in cleaner code (this is simply a construction of objects that contain others) – Delegation may be used for reusing “parent” behavior Java course – IAG0040 Lecture 11 Anton Keks Slide 12
  • 13. Iterator ● Behavioral pattern, synonym: Cursor ● You already know it from the Collections API! ● Iterator provides a way for accessing elements of an aggregate object sequentially without exposing its underlying representation ● Iterator is a special object provided by an aggregate object for holding of iteration state – better than if aggregate objects change their state during iteration (e.g. provide their own next() methods) – better than index-based element access - hides implementation details – several iterators may be used at once on the same data Java course – IAG0040 Lecture 11 Anton Keks Slide 13
  • 14. Lazy Initialization ● The idea is to initialize “expensive” objects on demand, e.g. only when they are accessed (this is sometimes referred to as “caching”) – if expensive object is never accessed then it is never created ● If initialization takes time and several threads access the object, then synchronization is needed ● Double-checked locking is a clever (but broken) trick: – public Object getExpensiveObject() { if (instance == null) { synchronized (this) { if (instance == null) instance = new ... } } return instance; } Java course – IAG0040 Lecture 11 Anton Keks Slide 14
  • 15. Singleton ● Creational pattern, sometimes uses lazy initialization ● Ensures a class has only one instance, and provides global access point to it ● public class Singleton { private Singleton() {} // private constructor private static Singleton uniqueInstance = new Singleton(); public static Singleton getInstance() { return uniqueInstance; // can be lazily initialized } } Java course – IAG0040 Lecture 11 Anton Keks Slide 15
  • 16. Singleton (2) ● Better than global variables (controlled access, doesn't pollute namespace) ● More flexible than class operations (static methods): can be polymorphic and subclassed, permits easy design changes, etc ● Disadvantages: may result in coupled code, if used directly too much. Difficult to mock in unit tests ● (better alternative – use singletons in an IoC container, like PicoContainer or Spring) Java course – IAG0040 Lecture 11 Anton Keks Slide 16
  • 17. Factory Method ● Creational pattern, synonyms: Factory, Virtual Constructor ● Defines an interface for creating an object of particular abstract type, but lets subclasses decide which concrete class to instantiate ● Used by many modern frameworks and APIs (e.g. SAXParserFactory) ● public class BulldogFactory implements DogFactory { public Dog createDog() { return new Bulldog(); } } ● public class DachshundFactory implements DogFactory { public Dog createDog() { return new Dachshund(); } } Java course – IAG0040 Lecture 11 Anton Keks Slide 17
  • 18. Factory Method (2) ● Allows writing of polymorphic code that can work with different implementations of interfaces without any direct references to them, eliminates hardcoding of implementation class names ● The method must be non-static, if you want to override it in a superclass of factory ● Variation: factory method can be static and decide itself what to instantiate – using configuration – with the help of parameters Java course – IAG0040 Lecture 11 Anton Keks Slide 18
  • 19. Abstract Factory ● Creational pattern, synonym: Kit ● Provides an interface for creating families of related or dependent objects without specifying their concrete classes ● Abstract Factory is similar to Factory Method with the exception that methods are never static and Factories are always subclassed in order to return different sets of instances Java course – IAG0040 Lecture 11 Anton Keks Slide 19
  • 20. Abstract Factory (2) ● Example: GUI toolkit with Factories for creation of widgets with different look and feel ● public interface AbstractWidgetFactory { public Button createButton(); public ScrollBar createScrollBar(); } public class MotifLookAndFeelWidgetFactory implements AbstractWidgetFactory { ... } Java course – IAG0040 Lecture 11 Anton Keks Slide 20
  • 21. Builder ● Creational pattern ● Eliminates 'telescoping' constructors – without sacrificing immutability – has all advantages of Factory ● Create Builder inner static class with methods returning 'this' and build() method returning the class instance ● Pizza pizza = new Pizza.Builder(). withOnion().doubleCheese().build(); ● Very readable, better than infinite number of constructors with boolean or numeric arguments, or setters Java course – IAG0040 Lecture 11 Anton Keks Slide 21
  • 22. Common structural patterns ● Decorator ● Adapter ● Composite ● (Proxy) Java course – IAG0040 Lecture 11 Anton Keks Slide 22
  • 23. Decorator ● Structural pattern, synonym: Wrapper ● Attach additional responsibilities to an object dynamically. ● Decorators provide a flexible alternative to subclassing for extending functionality ● Useful for adding responsibilities dynamically to objects, not classes. ● Decorator must have the same interface as the decorated object. Java course – IAG0040 Lecture 11 Anton Keks Slide 23
  • 24. Decorator (2) ● Decorator delegates all method calls to wrapped instance and does something else before or after. Every object can be decorated several times. ● BufferedInputStream decorates any InputStream ● public class LoggingConnection implements Connection { private Connection conn; ... public boolean isActive() { System.out.println(“isActive was called!”); return conn.isActive(); } ... } Java course – IAG0040 Lecture 11 Anton Keks Slide 24
  • 25. Adapter ● Structural pattern, synonym: Wrapper ● Converts the interface of a class into another interface clients expect ● Adapter lets classes work together that couldn't otherwise because of incompatible interfaces Java course – IAG0040 Lecture 11 Anton Keks Slide 25
  • 26. Adapter (2) ● In other words, Adapter just translates requests to another API of the wrapped class ● Examples – InputStreamReader adapts an InputStream to the Reader interface – Arrays.asList() represents java arrays as List instances – Collections.enumeration() represents Iterators as Enumerations Java course – IAG0040 Lecture 11 Anton Keks Slide 26
  • 27. Composite ● Structural pattern, similar to Decorator ● Composes objects into tree structures to represent part-whole hierarchies ● Composite lets clients treat individual objects and compositions of objects uniformly Java course – IAG0040 Lecture 11 Anton Keks Slide 27
  • 28. Composite (2) ● Example: in a GUI toolkit, a Window is a composite of other Widgets, while is a Widget itself ● Many GUI toolkits have base classes named Composite, which can have a layout manager assigned and an arbitrary number of child Composites ● SequenceInputStream is a composite of many InputStreams Java course – IAG0040 Lecture 11 Anton Keks Slide 28
  • 29. Proxy ● Decorator, Adapter, and Composite – any of them can be called 'Proxy' ● Proxy is a class, functioning as an interface to another thing ● In a more specific sense (Virtual Proxy): wrapping classes can – control access to wrapped objects – lazily initialize the delegates inside them Java course – IAG0040 Lecture 11 Anton Keks Slide 29
  • 30. Strategy ● Behavioral pattern, synonym: Policy ● Defines a family of algorithms, encapsulates each one, and makes them interchangeable; eliminates conditions from the code (GoF) ● Capture the abstraction in an interface, bury implementation details in derived classes ● Strategy lets the algorithm vary independently from clients that use it – Algorithms can be changed on-the-fly at runtime Java course – IAG0040 Lecture 11 Anton Keks Slide 30
  • 31. Strategy (2) ● Strategy pattern allows adding of new algorithms easily and/or dynamically ● Participants: – Strategy – an interface or abstract class of all strategies – ConcreteStrategy – each is a different implementation of Strategy – Context – a class, initialized to use and maintain a ConcreteStrategy, can provide additional (context specific) data to it Java course – IAG0040 Lecture 11 Anton Keks Slide 31
  • 32. State ● Behavioral pattern, similar to Strategy ● Each “Strategy” is one of the states of the Context – Strategy usually represents a single abstraction – each State can implement several behaviors (different actions, methods) – State interface may as well provide methods for transitions in order to implement a Finite State Machine Java course – IAG0040 Lecture 11 Anton Keks Slide 32
  • 33. Façade ● Structural pattern ● Provides a unified interface to a set of interfaces in subsystem ● Facade defines a higher-level interface that makes the subsystem easier to use ● Structuring a system into subsystems reduces complexity. Then subsystems can communicate only through Facades, while using their own lower-level interfaces internally. This reduces coupling ● Example: consider internals of a compiler: it can have classes like Scanner, Parser, ProgramNode, BytecodeStream, etc, but externally you use the Facade class named Compiler, which simply takes input file and produces an output file ● Facade just delegates requests to appropriate subsystem classes, it doesn't do anything itself Java course – IAG0040 Lecture 11 Anton Keks Slide 33
  • 34. Prototype ● Creational pattern ● Specifies the kind of objects to create using the prototypical instance – creates new objects by copying (cloning) the prototype ● Allows having an initialized reference instance of some abstract class, then it can be cloned or recreated with reflection API for creation of new objects ● Useful when creating new instances is too complex (and slow) or less convenient than cloning ● Convenient for implementation of plug-in architectures, where implementations may be added/removed dynamically Java course – IAG0040 Lecture 11 Anton Keks Slide 34
  • 35. Observer ● Behavioral pattern, synonym: Publish- Subscribe ● Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically ● Provides decoupled classes, which can work together or independently Java course – IAG0040 Lecture 11 Anton Keks Slide 35
  • 36. Observer (2) ● Participants: – Subject (Observable) – the data to observe – Observer – an updating interface for objects, which are notified – ConcreteSubject – sends notifications to all registered ConcreteObservers – ConcreteObserver – knows about ConcreteSubject, updates itself on notifications ● Java provides both Observable abstract class and Observer interface Java course – IAG0040 Lecture 11 Anton Keks Slide 36