Design Patterns

advertisement
Design Patterns
CSIS 3701: Advanced Object Oriented Programming
Design Patterns
• Standard “toolbox” of design ideas
– Usually codify solutions to common problems
within system design
• Usually support the major data classes within a
system by helping them communicate
– Identify major data classes
– Identify the design pattern classes to connect them
– Not at overall architecture level
(but often used to implement common components
within an architecture)
Design Patterns
• Creational Patterns
–
–
–
–
–
Abstract Factory
Builder
Factory Method
Prototype
Singleton
• Structural Patterns
–
–
–
–
–
–
–
Adapter
Bridge
Composite
Decorator
Façade
Flyweight
Proxy
• Behavioral Patterns
–
–
–
–
–
–
–
–
–
–
–
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
Design Patterns
• “Design Patterns: Elements of Reusable
Object-Oriented Style”
(Gamma, Helm, Johnson, Vlissides)
• Many are built directly into Java
– Façade pattern  interface
– Template pattern  abstract methods
– Observer, Command patterns  event handlers
–…
Decorator Pattern
• “Attach additional responsibilities to an object
dynamically. Decorators provide a flexible alternative
to subclassing for extending functionality.”
• Example: The JScrollPane visual component.
– Can be “wrapped” around any other
visual component (JTextArea,
JPanel, etc.)
– Contains the other visual component.
– Much more convenient than trying to
define scrolling in every different visual class.
Decorator Pattern
• JScrollPane example:
JTextArea area = new JTextArea(10, 25);
JScrollPane scroll = new JScrollPane(area);
JPanel p = new JPanel();
getContentPane.add(p);
p.add(scroll);
We then add the
JScrollPane to the
JPanel
The JScrollPane
contains the JTextArea
Façade Pattern
• “Provide a unified interface to a set of interfaces in a
subsystem. Façade defines a higher-level interface
that makes a subsystem easier to use.”
• Example:
Every time a new name is added to a NameList, name
should be used to add a new record to a database.
Instead of the developers of putting the SQL and JDBC code
directly in the methods, a separate NameList class provides
methods to create the SQL and JDBC.
Façade Pattern
Façade Pattern
• Often implemented as an interface
– Interface for façade defined in advance
– Specific classes later implement the façade
Iterator Pattern
• Provides way to access elements of an
aggregate object sequentially without
knowing representation
• Example:
User classes would like to get students in a Roster
without having to deal with array, linked list, or
however Roster stores it.
Iterator Pattern
Memento Pattern
• Without violating encapsulation, capture and
externalize an object’s internal state so than the
object can be restored to this state later.
• Example:
Students may change their mind after adding a
course. You need to implement an “undo” button
that undoes up to the last five changes made.
Memento Pattern
• Serialization in Java
– Convert entire state of object to
single string which can be stored
in either a file or a database.
object
Member variables
read
file
Memento Pattern
Observer Pattern
• Define a one-to-many dependency between objects
so that when one object changes state, all its
dependents are notified and updated automatically.
• Example:
The registrar maintains a list of all open sections.
When a section is opened or closed (due to students
dropping or adding), that list must be updated.
Observer Pattern
Observer Design Pattern
• Implemented by Listeners in Java
– Objects register with components (by calling their
addActionListener methods).
– When events occur on components, those objects notified
(by calling their actionPerformed methods).
Command Design Pattern
• “Encapsulate a request as an object, thereby letting
you parameterize clients with different requests”
• Implemeted by Event objects in Java
public class Main
public void actionPerformed(
ActionEvent e) {
…
}
JButton object
ActionEvent
public Object getSource();
Abstract Factory Pattern
• Provide and Interface for creating families of related
or dependent objects without specifying their
concrete classes.
• Example:
Java’s BorderFactory class contains static
methods that return different types of borders for
use by panels. Adding new types of borders just
requires adding new methods, not new classes.
Abstract Factory Pattern
Download