๏ฟฝ โซ โฝ โต โง โผ โญ โช โถ โง โญ โง โฎ โโ โดโพ โซ โซ โง โด โฎ โพ โผ โ โ โ โช โฟ โ โฝ โง โผ โถ โฎ โง โฅ โซ โ โง โด โฎ โฟ โฑ โ โฝ โด โผ โช โ โง โผ โฝ โฎ โพ โ โ โซ โ โ โช โ โณโจ โฑ โณโจ โฉ โ โฒ โ โฉ โณโจ โณโจ โฉ โ โฉ โณ โ โฉ โก โฉ โณ โ โ โฉ โโ โ โ โ โ โ โโ โ โ โ โ โ โ โฒ โ โ โผ โ โ โ โ โ โโ โ โ โ โ โธ โซ โด โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โฅ โ โ โง โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โฉ โ โซ โง โธ โง โป โฒ โง โซ โฎ โผ โง โฑ โผ โฝ โบ โง โซ โฎ โช โซ โธ โด โซ โธ โง โง โณ โซ โญ โง โซ โง โฌ โง โญ โง โฑ โง โด โซ โธ โง โฎ โน โถ (2) publish = raiseEvent Exchange Publisher Rate $Cdn cost of connectAsTarget (1) subscribe = Subscriber hotel Event-Connector โโคโฃ Implementation โโโ โดโคโก โชโ โซ โโคโซ โโญโฌ โฎโฐโฏ โตโทโถ โฏโทโฒ โตโทโถ โ โคโ โฏโทโฒ โ โคโโ โฏโทโฑ โโคโ โตโทโถ โฏโทโฒ โตโทโถ โโ โ โชโ โซ โฆโ โง โบโคโพ โฒโคโณ โโคP โดโคโต
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Code for Target (Subscriber) Interface // Target implements this method. It is called by the // event connector whenever a new event is fired. public interface EventTarget { public void performEvent (EventObject e); } โโคโฃ โโโ
๏ฟฝ โโ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Code for New Event Type import java.util.EventObject; public class ExchangeRateChangedEvent extends EventObject { private float newExchangeRate; public int getNewExchangeRate () { return newExchangeRate; } public ExchangeRateChangedEvent ( Object source, float newRate) { super (source); newExchangeRate = newRate; } } โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โก โ โโ โ โ โ โ โ โ โ โ โโ โ โ EventConnector (Publisher) Code public class EventConnector { //There are zero or more targets represented as a vector private Vector targets = new Vector(); // When a new event is raised, the "performEvent" method of // each target is invoked public void raiseEvent (EventObject e) { for (int i=0; i<targets.size(); i++) { EventTarget t = (EventTarget) targets.elementAt (i); t.performEvent (e); } } //Each target must register itself as a target of this //connector. public void connectAsTarget (EventTarget targetComponent) { targets.add(targetComponent); } } โโคโฃ โโโ
โ ๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ More on Publish/Subscribe Basis of the Event-based Architectural Style โข โข Greatly improves modifiability and extendibility of systems โ At the expense of interaction complexity โ which may make analysis more difficult โข Used in most (all) graphical user interface frameworks โข Also very popular in development environments (e.g. IBM Eclipse) where a variety of tools can be easily integrated โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ ๏ฟฝ โ โ โ โ Sequence Diagram Publisher Subscriber1 Subscriber2 connectAsTarget connectAsTarget raiseEvent (change in state initiated by outside source or Publisher) performEvent performEvent โโฃโข โโโ
๏ฟฝ โโ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ ๏ฟฝ โ โ โโ โ โ โ โ Where do Design Patterns Come From? โข Actually mined from code โ General rule -- design pattern must be seen in at least three real systems before it is considered to be a design pattern โโฃโข โโโ
๏ฟฝ โป โ โ โโท โ โธ โ โน โบ โ โ โ โ โ โผ โ โ โโฝ ๏ฟฝ โ โ โ โ โ โฟ โ โ โ โ โฃ โ โโฌ โญ โฎ โ โฏ โ โฅ โฐ โช โฑ โ โฐ โฒ โโณ โฑ โง โ โ โฃ โฆ โ โถ ๏ฟฝ โ โ โซ โน โ โโ โ โ โ โ โฟ โบ โ โฟ โ โ โ โบ โน โ โ โ โ โ โฟ โ โ โ โ โ โ โ โผ โ โ โโท โ โ โ โ โ โฟ โฟ โ โ โ โ ๏ฟฝ โ โ โฟ โ โ โ โ โฟ โ โ โฆ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ ๏ฟฝ โช โ โ โก โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โฃ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฆ โ โ โฉ โ โ โฃ โง โ โฆ โ โ โ โ โ โ โก note: this text uses C++/Smalltalk, UML-like notation pages for each design pattern listed on web & slides โฆโตโด โโโ Bahrami mentions design patterns, no details pages for publish/subscribe pattern: 293-303 Reading โโโ Supplementary text for this topic: โโฃโข โโโ โโโ โโโ โคโโฅ โโโโ โโโข โกโ โโ โโโ โโโ โโโ โโโ โโโ โพโโ โข โข โข โข โข
CISC 323 Intro to Software Engineering Lecture 6-2 Adapter, Faรงade, Abstract Factory, and Flyweight Design Patterns
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ ๏ฟฝ โ โ โโ โ โ โ โ Adapter Design Pattern [Gamma et al., pp 139-150] โข Motivation โ Sometimes a class implements functionality similar to what an application requires, but not the correct interface for that application โ E.g. We wish to implement a BookList class implementing a list of text book used in a course int getNumBooks() Book getBook (int n) void addBook (Book newBook) โ These operations are very similar to the operations in the predefined Vector class โโฃโข โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โ โ ๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ Adapter Design Pattern โ Adapt Vector to BookList interface โ Implement BookList from scratch โโฃโข โโโ โโโ โ Use Vector โ โโก Options: โโโ โข
๏ฟฝ โ โ โ โ โค โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโ โก โ โ โ โ โ โโ โ โ โ ๏ฟฝ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ Two ways of adapting the Vector โโฃโข โโโ โ Object adapter Adapter โ Class adapter โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ ๏ฟฝ โ โโฃโข Class Adapter โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ ๏ฟฝ โ โ โโ โ โ โ โ Class Adapter BookList.java public interface BookList { public int getNumBooks(); public Book getBook(int n); public void addBook(Book newBook); } โโฃโข โโโ
import java.util.Vector; public class BookListClassAdapter extends Vector implements BookList { public int getNumBooks() { return size(); } public Book getBook(int n) { BookListClassAdapter.java return (Book) elementAt(n); } public void addBook(Book newBook) { for (int i=0; i<getNumBooks(); i++) { Book b=getBook(i); if (b.isSameBook (newBook)) { b.setQuantity (b.getQuantity() + newBook.getQuantity()); return; } } add (newBook); } }
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ ๏ฟฝ โ โ โก โ โ โ โ โ โ โ ๏ฟฝโ โ โ โ โ SampleClient.java // This code simply shows how a book list is instantiated public class SampleClient { public static void main (String [] args) { Book b = new Book (โฆ); BookList bl = new BookListClassAdapter (); bl.addBook (b); System.out.println (โBook list has โ + bl.getNumBooks() + โ booksโ); } } โโฃโข โโโ
๏ฟฝโ ๏ฟฝ โ โ โ โ โ ๏ฟฝ ๏ฟฝโ โ โ โ โ โ โโ โ โ โ โก โโ โ โ โฅ โค โขโฃ โ โ โก โ โ โ โ โ โโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝโ โก โ โ โ โ โ โโ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โฉ โ โ โ Class Adapter โข Adapter simply inherits operations of Vector โข Clients use BookList interface, not BookListClassAdapter directly โโโโ โโโ โฆโโง โโโ โโโ โโโ โโโ โ โโ โโฃโข โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โโ ๏ฟฝ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โก ๏ฟฝ โ โ โ โ โ โ โ โ โ ๏ฟฝโ General Form of Class Adapter โโขโ โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โโ ๏ฟฝ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โก ๏ฟฝ โ โ โ โ โ โ โ โ โ ๏ฟฝโ โโขโ Object Adapter โโโ
import java.util.Vector; public class BookListObjectAdapter implements BookList { Object Adapter private Vector books = new Vector(); public int getNumBooks() { BookListObjectAdapter.java return books.size(); } public Book getBook(int n) { return (Book) books.elementAt(n); } public void addBook(Book newBook) { for (int i=0; i<getNumBooks(); i++) { Book b=getBook(i); if (b.isSameBook (newBook)) { b.setQuantity (b.getQuantity() + newBook.getQuantity()); return; } } books.add (newBook); } }
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โก โ โ โโ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝโ โ โ ๏ฟฝ โ โ โ โ SampleClient.java // This code simply shows how a book list is instantiated public class SampleClient { public static void main (String [] args) { Book b = new Book (โฆ); BookList bl = new BookListObjectAdapter (); bl.addBook (b); System.out.println (โBook list has โ + bl.getNumBooks() + โ booksโ); } } โโขโ โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โโ ๏ฟฝ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โก ๏ฟฝ โ โ โ โ โ โ โ โ โ ๏ฟฝโ General Form of Object Adapter โโขโ โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โก โ โ โโ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝโ โ โ ๏ฟฝ โ โ โ โ Relation to Quality Attributes โข Modifiability โ Adapter class provides clean interface to clients of adapted object โข Reusability โ Takes advantage of adapted class for reuse โข Correctness โ Takes advantage of tested code โโขโ โโโ
๏ฟฝโ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ ๏ฟฝ โ โ โ ๏ฟฝโ โ โ โ โ The Faรงade Pattern [Gamma et al., pp 185-193] โข Motivation โ Sometimes part of a system is itself implemented as a subsystem, consisting of a set of objects โ Rather than revealing subsystem structure to rest of system, use faรงade object to provide interface to subsystem as a whole โโฃโข โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ ๏ฟฝ โก โ โ ๏ฟฝโ โ โ โ โ โ โ โ โ Facade โโฃโข subsystem classes General Idea client classes โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โข โ โ โ โ โ โ โ โ โฃ โ โ โ โ โ โ โ โ โ โ โโ โโ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝโ ๏ฟฝ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ A student information system provides access to The Faรงade Pattern โโโ โ Implemented via three classes โโโ โโโ โโโโ โโฃโข โโโโ โโโ โโโ โโโ functions on โโโโ โโโ โโกโ โโโ Example โโโโ โโโ โโโ โโโ โโกโ โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ Student Information System Classes class Courses { Courses.java โฆ public StudentList getEnrollment (CourseId c) { โฆ } โฆ } class Students { Students.java โฆ public CourseList getCourses (StudentId s) { โฆ } } class Facilities { Facilities.java โฆ public LectureHallId getLectureHall (CourseId c) { โฆ } } โโฃโข โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ Student Information System without Faรงade Student Information Subsystem โโฃโข โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ Student Information System with Faรงade Student Information Subsystem โโฃโข โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โโ โ Faรงade Implementation StudentInformationSystem.java public class StudentInformation System { Courses cs; Students ss; Facilities fs; โฆ public StudentList getEnrollment (CourseId c) { return cs.getEnrollment (c); } public CourseList getCourses (StudentId s) { return ss.getCourses (s); } public LectureHallId getLectureHall (CourseId c) { return fs.getLectureHall (c); } } โโฃโข โโโ
๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โก โ โข โ โ โ โ โ โ โ โ โ โ โ โก โ โ โโ โ โ โ โ โ โ โ โ โก โ โก โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ Relation to Quality Attributes โข Modifiability โ By removing external links to subsystem components, impact of changes to subsystem components limited to subsystem itself โข Performance โ Slight performance cost of extra call indirection through faรงade โโโ โโโ โโโ โโฃโข โโโ
๏ฟฝโ โช โ โฎ โ โง โฆ P โฐ โฑ โท โฐ โณ โฌ โ โฌ โซ โ โญ โ โฅ โฌ โฑ โผ P โฐ โฑ โช โท โณ โฌ โ โช โฑ โฐ โฏ โ โถ โฌ โ โญ P โง โฒ โฐ โ โพ โ โ โ โฟ โผ โ โ โผ โฝ โพ โฝ โพ โ โ โ โฟ โ โฝ โ โ โฌ โญ โฎ โ โฎ โช โณ โฏ โฆ โฒ โฝ โง โฑ โญ โฆ โฎ โง โฑ โฅ โ โฅ โ โ โฅ โฆ โถ โฌ โซ โฏ โ โช โง โฌ โซ โชโญ โ โฐ โฎ โ โญ โฆ โ โท โฌ โฐ โฌโญ โฌ P โฎ โซ โฒ โ โช โง โฐ โธ โฎ โ โฑ โฌ โฏ โณ โง โฑ โผ โ โช โฐ โช โญ โฑ โฒ โง โฆ โญ โ โฐ โท โช โฑ โฐ โช โญ โ โ โผ โช โฌ โฐ โฏ โฌ โฌ โญ โฎ โช โ โณ โญ โฑ โณ โฌ โฐ โฌ โฉ โฅ โญ โฐ โช โฐ โฐ โ โ โฝ โฌโญ โฉ โฌ โญ โฏ โช โฌ โญ โฎ โฉ โฐ โซ โช โฉ โฅ โ โ โ โ โฌ โฑ โ โฐ โซ โพ โฐ โฌ โง โฌ โด โณ โฌ โซ โฉ โฅ โฌโญ โญ โญ โฑ โซ โฒ โ โ โฏ โ โ โ โ โ โ โ โ โ โก โโ โ โ โ โ โ โโ โ โ โ โ โโข โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โต โฑ โซ โบโป โ โพ โ โฟ โป โพ โฝ โผ โน โ โ โป โพ โฝ โ โ โฝ โพ โ โ โฝ โ โผ โ โ โ โพ โ โ โ โ โ โน โ โป โ โป โฟ โ โฝ โป โผ โ โฌ โ โฝ โพ โ โพ โ โ โ โฝ โฟโ โป โฝ โ โผ โบโป โน โธ โฌ โซ โท โฆ โถ โ โ โป โ โ โ โ โฝ โฟ โผ โ โพ โ P โ โ Another Example: SavitchIn โโคโฃ โฆโ โง โฆโ โผ โฟโโ โโโ Input with Java API: SavitchIn: โฌโโ โฆโ โง โข โข
๏ฟฝ โ โง โฆ โฅ โ โ โ โ โช โ โ โ โโข โ โ โ โ โฉ โซ โ โฒโณ โฉ โฆ โถ โต โด โฐ โฐ โซ โฌโญ โช โช โฏ โซโฎ โ โง โซ โโ โฐ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ Categories of Patterns โข The patterns we have seen so far address structural problems in programs โ Adapter -- structures programs to aid reuse โ Faรงade -- localizes references to a subsystem, aiding modifiability โข Also interesting are โ Creational patterns -- help in object creation โ Behavioural patterns -- help manage runtime behaviour of program โ โฑโฐ โโคโฃ โโโ
๏ฟฝ โฝ โบ โด โป โฅ โง โฉ โช โน โซ โฐ โช โซ โฌ โฎ โฆ โธ โซ โฐ โ โช โฏโฑ โฌ โฐ โช โด โด โฌ โต โฐ โถ โง โท โช โฐ โฌ โฒ โฐ โช โ โพ โง โท โฌ โฌ โญ โถ โฟ โง โง โฉ โฏ โต โง โช โพโฟ โง โง โฉ โซ โด โฏ โ โญ โฎ โต โ โช โฏโฑ โฌ โช โฏ โฐ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โฏ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โฉ โง โฌ โญ โฎ โฅ โฌ โ โ โซ โ โ โซ โโ โ โ โญโง โ โโข โ โซ โ โ โช Abstract Factory [Gamma et al., pp. 87-95] โข Motivation โ Imagine you have a book ordering system in which you need to maintain a list of books โฎโณโฒ โฆโ โง โฐโโ โโโ โผโฆโ โง โ Initially, you wish to maintain a simple Vector โ However, after the system has been delivered, you decide you want a data structure that also permits books to be represented in sorted order โโคโฃ โโโ
import java.util.Vector; public class BookListClassAdapter extends Vector implements BookList { public int getNumBooks() { return size(); } Here is an initial implementation of a public Book getBook(int n) { BookList return (Book) elementAt(n); } public void addBook(Book newBook) { for (int i=0; i<getNumBooks(); i++) { Book b=getBook(i); if (b.isSameBook (newBook)) { b.setQuantity (b.getQuantity() + newBook.getQuantity()); return; } } add (newBook); } }
๏ฟฝโ โ โฑ โฐ โฌ โ โ โถ โฌ โฑ โด โณ โณ โ โป โฌ โ โณ โถโท โฏ โ โช โป โ โณ โฑ โณ โ โธ โถ โณ โ โณ โป โป โ โฏ โณ โ โณ โต โ โ โถ โฌ โฑ โธ โ โถ โด โฑ โฌ โฎ โ โธ โฑ โฐ โฏ โถ โฌ โธ โฐ โฎ โถ โฟ โป โด โด โฏ โฐ โฎ โถ โฟ โ โถ โฏ โฏ โฐ โ โถ โฏ โต โธ โธ โฎ โ โต โ โฑ โ โณ โ โฑ โ โณ โ โฏ โ โฑ โณ โ โฏ โณ โ โฎ โถ โฑ โ โ โด โฏ โณ โ โท โฌ โ โ โธ โถ โณ โ โณ โด โด โป โ โฎ โถ โฏ โถ โณ โธ โถ โฑ โฏ โต โ โธ โฑ โ โด โ โณ โฐ โ โฌ โ โป โฑ โฌ โธ โณ โป โป โฑ โ โต โธ โฑ โ โด โณ โฑ โซ โบ โฌ โฌ โน โป โฌ โด โถ โ โถ โ โธ โถ โฑ โ โฏ โณ โ โ โฏ โ โฑ โธ โฐ โฏ โถ โฌ โฑ โธ โฎ โถ โฟ โป โฑ โถโท โ โฏ โบ โฌ โฌ โน โฌ โธ โณ โถโท โต โฑ โฎ โณโด โฒ โฑ โฐ โฎโฏ โช โ โฉ โฅ โซ โด โ โฅ โณ โฏ โฟโ โฌ โพ โช โฉ โ โฝ โผ โฐโป โธ โณ โด โธ โฑ โด โด โฏ โฐ โฎ โ โ โฌ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โธ โฎ โน โต โธ โด โ โด โ โฟ โด โ โณ โธ โ โฌ โฏ โ โท โฌ โ โ โ โณ โต โณ โด โฌ โ โต โฎ โธ โฏ โต โธ โฌ โด โ โฏ โฌ โ โท โฌ โ โ โณ โ โฏ โด โป โธ โณ โฌ โฏ โบ โฌ โฏ โน โช โณ โฐ โ โฐ โฑ โฑ โฏ โ โฏ โณ โ โธ โฌ โซ โ โ โด โฌ โบ โฌ โซ โถ โฑ โฑ โ โณ โด โด โฟ โธ โณ โ โ โฏ โ โธ โถ Adding sorting behavior to the BookList class โ Option 1: Modify BookList so that every time a book is entered, the Vector is sorted โโดโโ Abstract Factory โโคโฃ โโโ โซโญโฌ โฆโคโง โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Abstract Factory โข Option 2: โ Create a BookList interface with the required functionality of maintaining a list of books โ Create an abstract factory class that creates an instance of the correct kind of BookList โโฃโข โโโ
๏ฟฝ โข โ โง โ โก โ โ โ โ โ โก โฉ โ โ โฆ โ โ โชโซ โฅ โ โ โฆ โ โ โ โง โ โ โฆ โ โ โ โ โ โ โ โ โ โ โ โ โ โง โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โค โ โ โ โ โ โ โ โ โ โ โฌ โ โค โ โ โ โ โ โ โ โ โ โฌ โ โ โก โ โฆ โ โ โก โ โ โ โข โฏ โฃ โ โฐ โ โ โฅ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ ๏ฟฝ โ โ โ โ โโ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โข โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโฃโข BookList variants โโโ โโฎโญ โ โโก โโโ โโโ โโโฒโฑ โโโ โโโ โ โโก โฃโโค โโโ โ โโก โโโ โฃโโค โโโ โโโ
๏ฟฝโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โโ โ Problems with Changing Implementations โข Problem: If we change from the VectorBookList to SortingVectorBookList implementation, need to ensure that wherever we create a book list, we replace โnew VectorBookList() โ with โ new SortingVectorBookList() โ โข This could be a large change โ What if source to classes creating book lists is not available? โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โโคโฃ Abstract Factory โโโ
๏ฟฝ โก โ โซ โ โ โ โ โ โ โฑ โ โ โ โฅโญ โ โ โ โ โง โ โ โ โ โ โ โ โฑ โ โ โก โฐ โ โ โ โก โค โฌ โ โ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โก โ โ โ โฏ โ โ โ โโ โ โ โฎ โ โ โ โโ โ โ โ โฑ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โก โฅโญ โ โ โค โง โฌ โ โ โ โ โ โโ โ โ โฅ โ โค โ โฆ โท โ โ โ โ โก โ โโ โ โก โ โซ โ โ โต โ โ โ โ โ โ โก โ โด โ โ โ โ โ โ โฅ โ โ โค โฆ โท โข โโ โ โ โ โถ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โก โ โ โ โ โ โก โ โ โก โ โ โ โ โ โ โโ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โค โฆโง โ โฆ โ โ โ โโ โ โฅโญ โ โ โ โฉ โช โ โ โ โฌ โ โ โโ โ โ โ โ โ โ โ โ โซ โ โค โฅ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โง โ โฎ โโคโฃ Abstract Factory โโโ โโโ โโโ โโโ โโโฏ โโโ โโโ โโโ โโโ โโโฐ โโฃโข โโโ โโโ โโณโฒ โโโ โโโฏ โโโ โโโโ โโโ โโโ โโโ โโโ โโโ
BookListFactory BookListFactory.java public interface BookListFactory { public BookList createBookList (); } class VectorBookListFactory implements BookListFactory { public BookList createBookList () { return new VectorBookList (); } VectorBookListFactory.java } class Client { Client.java โฆ BookListFactory blf; โฆ BookList b = blf.createBookList(); }
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Extending to Multiple Factories uses BookListFactory Client uses <<interface>> VectorBookListFactory SortingVectorBookListFactory BookList creates creates VectorBookList SortingVectorBookList The client is provided with an object of type BookList . This object may be either a VectorBookList or a SortingVectorBookList , depending on which factory was used. โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Extending to Multiple Factories uses BookListFactory Client uses <<interface>> VectorBookListFactory SortingVectorBookListFactory BookList creates creates VectorBookList SortingVectorBookList The client is provided with an object of type BookList . This object may be either a VectorBookList or a SortingVectorBookList , depending on which factory was used. โโคโฃ โโโ
๏ฟฝโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Extending to Multiple Factories uses BookListFactory Client uses <<interface>> VectorBookListFactory SortingVectorBookListFactory BookList creates creates VectorBookList SortingVectorBookList The client sees an object of type BookListFactory , so does not need to know whether it is using a VectorBookListFactory or a SortingVectorBookListFactory โโคโฃ โโโ
General Form of Abstract Factory
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Relating to Quality Attributes โข Modifiability โ Increased through use of indirection in creation process โ Creator does not need to know exactly what type of object is being created โโคโฃ โโโ
๏ฟฝโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ The Flyweight Pattern [Gamma et al., pp 195-206] โข Sometimes objects too expensive for applications where large numbers of objects required โข Flyweight objects provide cheaper object mechanism โข Illustrates abstract factory pattern โโฃโข โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โโ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ Flyweight โข In a text editor, wish to represent a set of rows, and within each row a set of columns โข Each row in turn contains a set of characters โข Logically, each character is a p p a r e n t an object โข However, a document of tens of thousands of characters would require tens of thousands of objects โโฃโข โโโ
๏ฟฝ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โค โ โฆโฉ โช โฎ โฌ โช โฏ โฐ โ โ โฑโฌ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โโฃ โ โ โฎ โฒ โ โ โ โ โ โโ โ โ โ โ โโฃ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โโ โ โฐ โฑ โฉ โฏ โฑโถ โฏ โท โถ โธ โน โฏ โฑ โฉ โป โถ โฏ โ โ โ โ โ โโ โ โ โ โ โ โฃ โฝ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โข โ โ โ โ โ โ โ โ โ โ y z m t x l n w k e v i h u r g t a s f p e r p d q c p a โโฃโข b o a n โโโ โณโตโด Flyweight โโโ โโโ โโโโ โโโ โโโ โนโบโถ โโโ โซโญโฌ โ โโก โโโ โโโ โฅโงโฆ โโโ โโญโผ โโโโ
๏ฟฝ โฒโฌ โฏ โบ โน โท โฒโท โฏ โฉ โฐ ๏ฟฝ โฎ โท โช โฌ โฎ โช โฆโฉ โ โค โ โ โบ โฒ โ โบ โฏ โฒ โท โป โฉ โฒ โท โบ โฏ โน โฉ โท โธ โฆโฉ โ โค โฏ โฒ โท โป โ โณ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โโ โ Flyweight โข Intrinsic state: data that can be shared by many instances of object โซโญโฌ โดโถโต โฅโงโฆ โฏโฑโฐ โฏโฑโธ โข Extrinsic state: specific to a particular instance a p p a r e n t โฅโงโฆ a b c d e f g h i l m k n o p q r s t u v x y z w โโฃโข โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Flyweight Implementation create (intrinsicData) โข Client creates flyweight instances using flyweightFactory โข Factory requires intrinsic data as parameter -- e.g., parameter is โaโ to create instance of character โaโ โข Factory returns flyweight object with this intrinsic data โข Client must maintain extrinsic data -- e.g., character font, position โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ Relation to Quality Attributes โข Performance โ Systems with tens/hundreds of thousands or more of objects can be prohibitively expensive in memory use โ Flyweight objects reduce this expense โข Modifiability โ Encapsulation of system functionality no longer as clear โ Separation of intrinsic/extrinsic state into different objects โโคโฃ โโโ
CISC 323 Intro to Software Engineering Lecture 6-3 Composite, Iterator, and Builder Design Patterns
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Composite Design Pattern [Gamma et. al. pp.163-173] โข Intent โ To compose object into tree structures that represent part-whole hierarchies โ Lets clients treat individual objects and compositions of objects uniformly โโคโฃ โโโ
๏ฟฝ โ โ โ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โก โ โ โ โ โค โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โข โ โ โ โ โ โ โ โ โ โ โง โ โ โ โ โ โ โ โ โ โฆ โ โ โ โ โ โ โ โญ โด โฑ โธ โถ โต โฎ โฑ โฐ โญ โฉ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฅ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โก โโ โโ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โก โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโโ โโโ Solution: Use the composite design pattern โโโ โโฃโ โโคโฃ โโโ โถโบโน โฎโโท โโโ โโโ โโโ Motivation โชโโท โโโ โฎโโด โฒโฌโณ โฎโโฏ Problem: โโโ โชโฌโซ โโโ โข โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Applicability โข Use the Composite pattern ifโฆ โ You want to represent part-whole hierarchies of objects. โ You want clients to be able to ignore the difference between compositions of objects and individual objects. Clients will treat all objects in the composite structure uniformly. โโคโฃ โโโ
๏ฟฝ โ โ โ โ โโฉ โ โง โฃ โฃ โข โ โ โ โข โ โข โ โ โโ โ โ โ โ โ โ โ โโ โ โ โ โ โ โฎ โ โฑ โ โ โข โ โโฐ โ โโ โข โฅ โโฏ โฎ โโช โ โญ โ โ โฌ โ โ โ โ โ โ โ โข โ โโ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโข โโ โ โ Example: Swing Components โข Component โโโ โโโ โโโ โโโ โโคโฃ โโฆโฅ โข Leaf (atomic components) Given a frame containing multiple panes, each with multiple buttons/labels/checkboxesโฆ โซโคโ - Call paint() method on frame causes everything to be painted. โข Composite (top-level Swing - Changing the look and feel on the containers) frame is likewise propagated down. โโคโฃ โโโ
๏ฟฝโ โ โโ โ โโ โ โ โฃ โซ โข โง โ โ โฑ โ โซ โ โฅ โฅ โ โ โซ โ โฃ โ โ โฉ โ โช โ โ โ โฅ โโ โ โโ โ โฅ โฉ โ โ โซ โ โ โ โฃ โข โ โ โ โ โ โ โฅ โซ โฅ โ โ โ โง โข โ โฐ โ โฃ โโ โ โฅ โ โฉ โโ โ โ โ โ โข โฅ โฅ โ โ โฎ โ โ โ โโ โ โโ โ โข โ โฃ โ โ โ โฆ โ โ โ โ โ โข โ โ โ โ โ โ โ โ โ โฃ โ โ โโ โ โโ โ โซ โ โฃ โ โ โโ โซ โฅ โฃ โ โ โ โ โ โข โฅ โ โ โ โฉ โ โ โข โ โ โ โ โฐ โ โโ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โข โฅ โ โฃ โ โ โ โ โ โฃ โฅ โข โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โฅ โฅ โ โฅ โ โฅ โ โฅ โฅ โ โ โ โง โข โซ โ โ โ โ โโ โ โ โโ โโ โ โ โฃ โ โ โ โฆ โ โ โ โง โ โฃ โ โ โ โโ โโ โ โ โฃ โ โ โฃ โฆ โ โ โ โ โข โฅ โฅ โ โ โ โ โฐ โ โ โ โ โฃ โโโ โซโคโ โโคโฃ Participants โโโ โ โฉโญโฌ โซโคโ Component Composite Client Leaf โข โข โข โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Structure Component 0..* 0..* Client operation() addComponent() removeComponent() getChild() Composite Leaf +children operation() addComponent() operation() removeComponent() getChild() โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ Collaborations โข Collaborations โ Client uses component class interface to interact with objects in composite structure. โ If recipient is: โโโ โโโ โโโ โโคโฃ โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โผ โ โ โ โ โ โ โ โ โฒ โญ โ โผ โ โ โ โ โ โ โ โ โ โผ โ โฎ โต โด โฒ โฏ โช โจ โท โณ โซ โด โจ โช โช โฒ โฌ โฑ โณ โด โท โฏ โฎ โด โฑ โท โฏ โด โณ โฎ โฒ โ โ โปโผ โ โฏ โ โ โ โ โ โ โ โ โ โ โฏ โ โฏ โ โ โ โ โ โ โผ โ โ โ โ โ โ โ โ โ โฒ โ โ โ โผ โฑ โ โ โ โ โ โญ โ โ โ โ โ โผ โ โ โ โ โ โญ โ โ โ โ โ โ โ โฒ โฒ โ โด โณ โด โต โฐ โบ โจ โฒ โด โธ โฎ โฃ โฒ โฑ โฑ โฎ โท โฏ โฒ โปโผ โฒ โต โฎ โฑ โจ โฎ โซ โถ โฒ โฑ โท โด โฑ โณ โดโต โฃ โต โด โป โท โฑ โถ โณ โฒ โช โฒ โด โจ โธ โฎ โฃ โถ โฒ โฐ โฏ โฑ โดโจ โจ โฒ โปโผ โฒ โต โฐ โค โจ โฒ โฑ โณ โด โช โณ โฎ โฃ โฑ โท โฏ โด โณ โฎ โฌ โฑ โซ โฅ โข โ โช โง โ โซโ โฉ โ โต โฏ โฑ โดโจ โฒ โฒ โ โดโจ โด โฑ โท โฏ โฒ โปโผ โฒ โต โฎ โด โฒ โฏ โฑ โจ โณ โฒ โปโผ โฒ โต โด โฃ โฑ โฑ โต โท โณ โฑ โฏ โด ๏ฟฝ โ โ โ โด โ โ โ โ โ โ โฑ โดโต โฟ โพ โฒ โฝ โบ โ โปโผ โฒ โต โด โฏ โฒ โปโผ โฒ โต โฐ โบ โด โฏ โโ โ โถ โ โผ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฒ โ โผ โ โ โ โฒ โ โ โ โ โ โณ โดโต โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โ โโ โ โ โ โ โ โณ โ โฒ โฑ โฐ โฏ โฌ โซ โช โ โฉ โฅ โง โ โ โ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ โ โ โ โ โฒ โ โ โ โ P โ โ โ โ โ โฑ โ โ โผ โ โ โ โ โฏ โ โ โ โ P โ โ โ โ โ โฒ โต โฉ โ โณ โด โบ โผ โป โท โฏ โฑ โดโจ โท โบ โฏ โ โด โณ โฎ โฒ โฌ โ โ โ โผ โ โ โ โ โ โ โ โ โ โ โ โ P โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ P โ โ โ โ โผ โผ โ โฒ โผ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ P โ โ โ โ โฒ โผโโ โโฆโ โฏโโ โโฃโข Consequences โโโ โโฆโ โฏโโ โโนโฌ โทโนโธ โโฆโ โ โโฆโ โจโฃโ โโกโ โญโฆโฎ โคโฆโฅ
๏ฟฝ โฏ โฝ โพ โฌ โง โป โช โง โถ โผ โญ โฌ โง โท โฑ โฑ โฑ โณ โง โน โง โผ โผ โฐ โฒ โท โฝ โซ โช โง โง โง โถ โฌ โฒ โถ โญ โบ โบ โฉ โฐ โบ โ โฑ โถ โฐ โฌ โญ โฎโฏ โญ โฉ โง โบ โฑ โท โฝ โญ โฌ โฒ โฑ โป โฐ โฌ โฐ โฑ โช โบ โ โฅ โฒ โถ โญ โบ โฑ โฌ โฑ โฑ โฉ โง โต โฝ โญ โง โบ โฑ โฌ โช โง โพ โบ โณ โฉ โง โฎ โง โถ โฎโฏ โฐ โฑ โญ โณ โฌ โฐ โง โช โง โผ โน โง โฑ โณ โฐ โฑ โณ โง โณ โญ โฎโฏ โฉโญ โช โง โช โช โฐ โฌ โช โง โฒ โณ โช โพ โช โง โ โณ โบ โซ โฉ โน โง โฑ โณ โฐ โฌ โง โป โช โง โถ โฝ โฐ โญ โง โท โถ โง โป โฐ โฌ โน โซ โฉ โง โน โฌ โน โถ โซ โฑ โฉ โซ โน โฑ โฌ โ โง โถ โฎโฏ โฉโญ โฒ โผ โณ โฌ โฐ โน โฏ โง โบ โฑ โฌโง โซ โณ โฉโช โฑ โณ โง โถ โฎ โฉ โง โบ โฑ โน โญ โผ โง โน โง โบ โ โ โฐ โฐ โญ โฎโฏ โฐ โฑ โฉ โง โถ โถ โฉโญ โง โฑ โฐ โฌ โญ โฉโญ โฑ โง โบ โฑ โฒ โณ โช โผ โช โง โถ โง โป โฐ โ โฉ โผ โญ โฉ โญ โฑ โฎ โฌ โฐ โบ โฏ โน โญ โฎ โฏ โง โฌโง โซ โฑ โฌ โซ โต โฑ โด โฌโณ โง โญ โฒ โน โช โฑ โญ โฎ โญ โน โน โฌ โฑ โฉ โง โต โฝ โญ โผ โฌ โฑ โง โฏ โท โฑ โฌ โซ โญ โฐ โน โช โป โง โง โฐ โบ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โฌ โ โญ โฎโฏ โฉโญ โฌโง โซ โฉโช โฅ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ โฑ โผ โง โญ โบ โฑ โผ โญ โณ โญ โฐ โฑ โฉ โง โถ โถ โฉ โฌโง โช โฌ โฒ โถ โญ โบ โบ โฑ โญ โช โฑ โช โง โญ โฑ โฌโง โง โฑ โณ โฐ โง โฎ โช โฌ โง โบ โฑ โฌ โซ โฝ โญ โฌ โถ โช โฒ โณ โช โฌ โฑ โฉ โง โต โบ โฝ โฌ โฐ โฌ โฌ โฐ โน โฉ โฌ โง โฒ โญ โฌ โถ โช โฑ โฉ โง โช โผ โน โง โฑ โณ โฐ โณ โญ โฎ โฎ โญ โฉ โบ โฑ โฉ โผ โช โถ โฉ โน โง โณ โฐ โช โฑ โณ โน โช โฉโญ โ โญ โง โณ โช โญ โฑ โฐ Why is Composite considered a design pattern and โฝโถโธโท not just an example of polymorphism? โฌโฟโ โถโธโท โโคโฃ โฝโโง โงโฟโพ โโโ Question? โงโฟโพ โถโธโท โฆโ โง โข
๏ฟฝ โญ โถ โง โฎ โง โณ โฑ โฌ โผ โถ โฑ โบ โง โฌ โฑ โน โซ โง โถ โฑ โช โผ โญ ๏ฟฝ โฐ โฑ โง โน โฑ โช โฐ โณ โ โญ โป โง โน โฉ โซ โน โญ โฉโญ โณ โฑ โง โณ โฑ โฌ โผ โง โช โป โง โฉ โฑ โญ โน โ โน โป โน โถ โง โ โน โง โ โช โฎโฏ โฐ โญ โฑ โง โน โช โฑ โฐ โณ โ โฑ โน โญ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โฏ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โน โน โซ โ โฑ โซ โน โง โฌ โง โฌ โ โซ โฐ โน โง โฌ โซ โฏ โฑ โฉ โท โ โ โโข โณ โ โ โ โ โช โ โ โ โ element in list Move to next Current element The Iterator Pattern โโคโฃ Last element for (int i=0; i < v.size(); i++) { [Gamma et al, pp 257-271] Object o = v.elementAt(i); โโโ โงโฟโพ โฆ โฆ } First element โ โ โญ
โ ๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ The Iterator Pattern โข Iteration allows a program to successively visit each element in a container class โ I.e. over any class that contains a collection of elements โข List (Vector), Tree, Hash Table, Graph, โฆ โโคโฃ โโโ
๏ฟฝ โท โบ โฉ โท โฉ โซ โฉ โง โฎ โฟ โฏ โท โญ โป โฉ โฌ โฉ โฎ โช โฌ โง โฉ โณ โถ โพ โธ โผ โฉ โ โง โณ โฉ โฌ โท โธ โฏ โง โถ โฝ โฐ โง โฎ โญ โฏ โง โฉ โฌ โฑ โฉ โป โโ โฎ โง โต โฒ โฏ โด โฏ โฎ โญ โฎ โฏ โฐ โง โฌ โฐ โฎ โด โฑ โฉ โถ โฏ โต โฏ โฉ โฐ โฉ โ โญ โ โ โ โ โ โ โ โ โฉ โ โถ โณ โฎ โท โธ โฐ โง โถ โฉ โฝ โ โฌ โบ โช โด โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โฅ โ โ โง โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โฎ โฉ โช โฎ โต โช โง โถ โฎ โง โญ โท โฏ โบ โซ โญ โฎ โญ โป โด โฎ โฌ โญ โถ โง โณ โณ โฌ โฑ โฒ โฏ โง โฉโด โฏ โฎ โฉ โฎ โฌ โญ โญ โฎ โฌ โฉ โฐ // Returns true as long as there are more // Returns next element to visit โฎโนโธ public interface Enumeration { โฏโ โฐ boolean hasMoreElements(); Iterators in Java โโคโฃ Object nextElement(); โฏโ โฐ // elements to visit โโโ โฎโนโธ โฏโ โฐ โฆโ โง }
๏ฟฝโ โ โ โ โ โ โโ โ โ โ โโ โ โ โ โ โ โ โ โฝ โค โฅ โฉ โญโฎ โฏ โด โต โช โณ โถโท โง โฎ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ Iterators in Java โชโฌโซ โฆโ โง // Returns all elements in the Vector public Enumeration elements(); โฐโ โฑ โฒโ โณ // Returns all elements in the Hashtable. // That is, returns all values that have been // entered into the hashtable via put public Enumeration elements(); โโฃโข โโโ
๏ฟฝโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โ โ โ โ Example: Using an Iterator with โโฃโข โโโ a Vector
๏ฟฝ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โโ โ โ โ โ โ โก โโ โ โ โกโ โ โ โ โกโ โ โ โ โกโ โ โ โ โโ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ Using an Iterator with a Vector โข Client creates an iterator by calling the Vectorโs elements method โโโ โโโ โโโ โโโ โโโ โข Client then accesses elements of Vector via Enumerationโs methods for (Enumeration e = v.elements(); e.hasMoreElements();) { Object o = e.nextElement(); โฆ } โโฃโข โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Implementation of Iterator for Vector โข Vector must implement method โ Enumeration elements () โ Must return an implementation of the Enumeration interface โ Iterator must successively return values in vector โโคโฃ โโโ
๏ฟฝโ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ Classes for Vector Iterator โโคโฃ โโโ
class Vector { โฆ public Enumeration elements () { return new VectorEnumeration (this); } โฆ } How we might implement an enumeration in a vector. (Not necessarily how it is really implemented.)
import java.util.Vector; class VectorEnumeration { // Represents where we are in the vector private int currentElement = 0; // The vector we are iterating through private Vector v; public boolean hasMoreElements () { return (currentElement < v.size()); } public Object nextElement () { Object returnElement = v.get (currentElement); currentElement++; return returnElement; } public VectorEnumeration (Vector v) { this.v = v; } }
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ General Form of Iterator Abstract representation of container Enumeration interface Concrete representation Concrete iterator for specific container class - e.g. of container - e.g. Vector iterator for Vector is different from iterator for hashtable โโคโฃ โโโ
๏ฟฝ โโ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Relation to Quality Attributes โข Modifiability โ Separates iteration behaviour from specifics of container class โ Therefore can change container class without impacting code that iterates over it โข Performance โ May be some minor performance penalty through indirection in iterator โโคโฃ โโโ
๏ฟฝ โโ ๏ฟฝ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ โ โโ โ โ โ โ โ โ Builder Design Pattern [Gamma et. al. pp. 97-106] โข Intent โ Separate the construction of a complex object from its representation โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โโ โ โ โ โ Applicability โข Use the Builder pattern whenโฆ โ The algorithm for creating a complex object should be independent of the parts that make up the object and how theyโre assembled โ The construction process must allow different representations for the object thatโs constructed โโคโฃ โโโ
๏ฟฝ โโ โ โ โฎ โ โฌ โ โ โ โ โ โฃ โ โ โ โโ โ โ โ โ โ โ โ โฉ โซ โ โ โ โฌ โ โ โ โ โ โโ โ โโ โต โ โง โ โ โ โฅ ๏ฟฝ โ โ โ โ โ โ โ โ โฅ โ โฑ โ โ โโ โ โ โ โ โฒ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โง โ โ โ โณ ๏ฟฝ โ โ โ โ โ โฌ โ โ โ โฒ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โซ โ โ โ โ โ โ โ โ โ โ โ โ โ โซ โ โ โ โ โซ โ โ โ โฌ โ โ โช โ โ โ โ โ โ โฌ โ โ โซ โ โ โ โช โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โฃ โ โ โถ โ โซ โ โน โ โ โ โ โ โ โ โฌ โ โ โ โ โ โ โฌ โซ โ โโ โ โ โ โซ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โโ โ โ โ โโ โ โ โ โ โ โ โ โ โฆโง ๏ฟฝ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โฃ โโ โ โ โ โ โ โ โ โ โ โ โซ โ โ โฎ โ โฌ โ โ โ โ โ โ โช โ โ โฏ โ โ โ โโ โ โ โ โ โ โฌ โ โ โฐ โ โ โ โ โโ โ โฐ โ โโ โ โ โ โซ โ โช โ โ โ โ โ โ โโซ โช โ โ โ โ โโ โ โ โ โ โ โ โ โ โฉ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฌ โ โโขโ โโโ โโโ โโขโญ โโโธโท โโธโบ โโโ โโขโ โโขโ โโโ โโโ โโโ โโคโฃ โโโ โโโ โโโ Participants โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โโโ โกโโ โโโ โโโ โคโโฅ โดโโ
๏ฟฝ โฌ โฎ โฟ โพโ โฝ โญ โฏ โช โฎ โ โฏ โพ โถ โถโ โฌ โซ โช โ โถ โญ โซ โง โป โถ โฌ โ โถ โธ โฏ โถ โง โธ โฏ โ โ โ โฑ โ โโฏ โ โ โผ โฒ โ โ โถโ โธ โฎ โธ โฎ โซ โ โ โถ โ โฏ โฟโ โซ โฌ โฎ โถ โญ โ โฌ โถ โ โฌ โญ โฏ โฎ โฌ โซ โฝ โ โ โฎ โ โญ โ โฟ โญโฏ โฎ โฟ โ โฌ โ โ โ โซ โช โถ โป โฎ โถ โฝ โป โธ โ โฟ โฏ โซ โฎ โถ โฎ โฟ โ โธ โ โฌ โ โฎ โฌ โฎ โฟ โ โฌ โ โ โ โซ โช โถ โฎ โฏ โฉ โฌ โฝ โ โฃ โ โฑ โ โ โ โฑ โ โ โฌ โญ โ โ โ โญ โฌ โ โ โฏ โฌ โ โซ โ โญ โฑ โ โฏ โญ โช โฌ โ โฑ โ โฌ โ โ โ โฌ โญ โก โฏ โ โ โ โ โ โฏ โก โฏ โฏ โฌ โ โ โฅ โฏ โ โฉ โ โ โค โต โด โ โ โ โ โ โฑ โฏ โ โฏ โฌ โฉ โฏ โฌ โต โฑ โฑ โต โญ โ โ โซ โด โฌ โ โ โฑ โญ โญ โฑ โ โฒ โ โฒ โโ โซ โด โต โญ โฌ โฉ โ โช โญ โฑ โ โ โฑ โฌ โฌ โญ โ โ โฑโฏ โ โช โฏ โต โฌ โญ โ โซ โฏ โป โ โธ โป โช โด โณ โฒ โ โง โฎ โธ โ โธ โฌ โถ โฎ โญ โซ โผ โฌ โ โธ โฌ โถ โป โฎ โบ โ โฎ โถ โฏ โฝ โฌ โฎ โฎ โฟ โ โฎ โฟ โฏ โ โช โฌ โซ โฝ โ โธ โซ โพโ โธ โ โซ โ โซ โฎ โฏ โฟ โช โฟ โถ โฎ โฟ โท โถ โถ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โต โณโด โฒ โฑ โฌ โญ โ โช โฆ โฅ โ โ โ โ โ โ โ โโข โ โ โ โโ โ โ โ โ โ โ โ โฑ โฟ โ โฌ โฎ โฟ โถ โถ โ โฒ โ โ โ โฟ โฌ โถ โ โฏ โซ โฝ โ โ โฎ โ โฌ โญ โพโ โ โ โฎ โ โฎ โ โ โฏ โ โ โฌ โฎ โธ โถ โธ โถ โช โฎ โถ โ โฌ โฟ โญ โง โญ โช โซ โง โญโฏ โฟ โ โฎ โฝ โฎ โถ โช โช โฟ โถ โธ โถโ โฎ โฝ โฎ โง โธ โฝ โฏ โ โถ โท โฌ โ โฌ โญโฏ โฝ โ โฎ โถ โ โฎ โธ โฆ โ โฌ โ โ โถ โ โ โถ โ โฟ โฝ โถ โญโฏ โฟ โ โฎ โซ โฎ โ Example: JDOM SAXBuilder โโชโฉโ โผโคโฏ Constructs products from an XML document. โชโโฉโ โPโญ โโนโ โชโคโซ โชโโฉโ โPโญ โผโคโฏ โฑโโโ โโคโฃ โผโคโฏ โโชโฉโ โโโ โผโคโฏ โผโคโฏ โซโนโธ โซโนโธ โฒโจโณ โโชโฉโ โชโฉโ โโโ โผโคโฏ โPโ โPโญโฑโโ โงโฉโ โผโคโ โโโ โฎโฐโฏ โโฉโ โPโ โโขโก โฌโโ โPโ โซโคโฌ โชโฉโ โงโฉโ โงโฉโ โงโฉโ โข
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Structure Builder Director buildPart() ConcreteBuilder <<creates>> Product buildPart() getProduct() โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ Collaborations The client creates the Director object and โข configures it with the desired Builder object โข Director notifies the Builder whenever a part of the product should be built โข Builder handles requests from the director and adds parts to the product โข The client retrieves the product from the builder โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Collaborations (contโd) aClient : Client aDirector : aConcreteBuilder Director : ConcreteBuilder new ConcreteBuilder() new Director(aConcreteBuilder) construct() buildPartA() buildPartB() buildPartC() getResult() โโคโฃ โโโ
๏ฟฝ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโข โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โโ โ โ โ โ โ โ Consequences โข Benefits โ It lets you vary a productโs internal representation โ It isolates code for construction and representation โ It gives you finer control over the construction process (object constructed step-by-step under the directorโs control) โข Disadvantages โ N/A โโคโฃ โโโ
๏ฟฝ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ ๏ฟฝ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โก โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ ๏ฟฝ โ โ โ โ โ โ โ โ โ โโข โ โโ โ โ โ Builder, Composite and Iterator Design Patterns often Relationship between Composite, โโโ Iterator, and Builder โโคโฃ โโโ โโโ โโโ โกโโ work together โโโ โโโ โข
๏ฟฝ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โฅ โ โ โ โโ โ โ โ โง โ โ โ โ โฆ โ โ โ โ โ โ โ โ โ โช โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฉ โง โ โฆ โ โ โ โ โฆ โ โ โ โ โ โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โก โ โ โ โ โ โโ โ โ โ โ โ โ โ โ โ โ โ โ โฅ โ โ โ โ โ โ โ โ โโ โ โ โโข โ โ โ โ โ โ Summary of Patterns โโคโฃ Discussedโฆ โโโ Behavioural Patterns: Creational Patterns: Structural Patterns: โกโโ โข โข โข
Recommend
More recommend