More design patterns - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

More design patterns

Description:

OO Programming; Want to adapt class to foreign interface type. Example: ... first = s.substring(0, i).trim(); //right is last name. last =s.substring(i 1).trim ... – PowerPoint PPT presentation

Number of Views:47
Avg rating:3.0/5.0
Slides: 20
Provided by: IDE66
Category:
Tags: design | more | patterns | trim

less

Transcript and Presenter's Notes

Title: More design patterns


1
More design patterns
  • The ADAPTER Pattern
  • Actions and the COMMAND Pattern  
  • The FACTORY METHOD Pattern
  • The PROXY Pattern
  • The SINGLETON Pattern

2
Adapter pattern
  • OO Programming Want to adapt class to foreign
    interface type
  • Example Add CarIcon to container
  • Problem Containers take components, not icons
  • Solution Create an adapter that adapts Icon to
    Component
  • Ch10/adapter/IconAdapter.java
  • Ch10/adapter/IconAdapterTester.java

3
The ADAPTER PatternSolution
  • Define an adapter class that implements the
    target interface.
  • The adapter class holds a reference to the
    adaptee. It translates target methods to adaptee
    methods.
  • The client wraps the adaptee into an adapter
    class object.

4
Adapt interfaces
  • public void mainFrame extends Frame
  • implements WindowListener
  • public void mainFrame()
  • addWindowListener(this) //frame listens
  • //for window events
  • public void windowClosing(WindowEvent wEvt)
  • System.exit(0) //exit on System exit box clicked
  • // empty methods
  • public void windowClosed(WindowEvent wEvt)
  • public void windowOpened(WindowEvent wEvt)
  • public void windowIconified(WindowEvent wEvt)
  • public void windowDeiconified(WindowEvent wEvt)
  • public void windowActivated(WindowEvent wEvt)
  • public void windowDeactivated(WindowEvent wEvt)

5
Adapt interface
  • public class WindowAdapter implements
    WindowListener
  • public void windowClosing(WindowEvent wEvt)
  • public void windowClosed(WindowEvent wEvt)
  • public void windowOpened(WindowEvent wEvt)
  • public void windowIconified(WindowEvent wEvt)
  • public void windowDeiconified(WindowEvent
    wEvt)
  • public void windowActivated(WindowEvent wEvt)
  • public void windowDeactivated(WindowEvent
    wEvt)
  • class WindAp extends WindowAdapter
  • public void windowClosing(WindowEvent e)
  • System.exit(0)

6
Action and Command Pettern
  • Example Cut a block of text
  • Select Edit-gtCut from menu
  • Click toolbar button
  • Hit CtrlX
  • Action can be disabled (if nothing is selected)
  • Action has state
  • Action should be an object

7
Abstract Action
  • Extends ActionListener
  • Can be enabled/disabled
  • Additional state, including
  • Action name
  • Icon
  • helloAction.putValue(Action.NAME, "Hello")
  • menu.add(helloAction)
  • Extend AbstractAction convenience class

Action Example Ch10/command/CommandTester.java
Ch10/command/GreetingAction.java
8
The COMMAND Pattern
  • When you wuant to implement commands that behave
    like objects
  • because you need to store additional information
    with commands
  • because you want to collect commands.
  • Solution
  • Define a command interface type with a method to
    execute the command.
  • Supply methods in the command interface type to
    manipulate the state of command objects.
  • Each concrete command class implements the
    command interface type.
  • To invoke the command, call the execute method

9
Factory method
NameFactory nfactory new NameFactory() private
void computeName() //send the text to the
factory and get a class back namer
nfactory.getNamer(entryField.getText()) //comput
e the first and last names //using the returned
class txFirstName.setText(namer.getFirst()) txLas
tName.setText(namer.getLast())
10
  • class NameFactory
  • //returns an instance of LastFirst or FirstFirst
  • //depending on whether a comma is found
  • public Namer getNamer(String entry)
  • int i entry.indexOf(",") //comma determines
    name
  • order
  • if (igt0)
  • return new LastFirst(entry) //return one class
  • else
  • return new FirstFirst(entry) //or the other

11
  • class Namer
  • //a simple class to take a string apart into two
    names
  • protected String last //store last name here
  • protected String first //store first name here
  • public String getFirst()
  • return first //return first name
  • public String getLast()
  • return last //return last name

12
class LastFirst extends Namer //split last,
first public LastFirst(String s) int i
s.indexOf(",") //find comma if (i gt 0) //left
is last name last s.substring(0,
i).trim() //right is first name first
s.substring(i 1).trim() else last s //
put all in last name first "" // if no
comma
  • class FirstFirst extends Namer //split first
    last
  • public FirstFirst(String s)
  • int i s.lastIndexOf(" ") //find sep space
  • if (i gt 0)
  • //left is first name
  • first s.substring(0, i).trim()
  • //right is last name
  • last s.substring(i1).trim()
  • else
  • first // put all in last name
  • last s // if no space

13
The FACTORY METHOD Pattern
  • A Factory pattern is one that returns an instance
    of one of several possible classes depending on
    the data provided to it.
  • Usually all of the classes it returns have a
    common parent class and common methods, but each
    of them performs a task differently and is
    optimized for different kinds of data.
  • Context
  • A type (the creator) creates objects of another
    type (the product).
  • Subclasses of the creator type need to create
    different kinds of product objects.
  • Clients do not need to know the exact type of
    product objects.

14
Factory Pattern
  • When to Use a Factory Pattern
  • You should consider using a Factory pattern when
  • A class cant anticipate which kind of class of
    objects it must create.
  • A class uses its subclasses to specify which
    objects it creates.
  • You want to localize the knowledge of which
    class gets created.
  • There are several similar variations on the
    factory pattern to
  • recognize.
  • 1. The base class is abstract and the pattern
    must return a complete working
  • class.
  • 2. Parameters are passed to the factory telling
    it which of several class types
  • to return. In this case the classes may share the
    same method names but
  • may do something quite different.

15
PROXIES
  • Example Delay instantiation of object
  • Expensive to load image
  • Not necessary to load image that user doesn't
    look at
  • Proxy defers loading until user clicks on tab

16
Proxies
  • Normally, programmer uses image for label
  • JLabel label new JLabel(new ImageIcon(imageName)
    )
  • Use proxy insteadJLabel label new JLabel(new
    ImageProxy(imageName))
  • paintIcon loads image if not previously loaded
  • public void paintIcon(Component c, Graphics g,
    int x, int y)   if (image null) image new
    ImageIcon(name)   image.paintIcon(c, g, x,
    y)

17
Singletons
  • Singleton class class with one instance
  • "Random" number generator generates predictable
    stream of numbers by using seed
  • Convenient for debugging can reproduce number
    sequence
  • Only if all clients use the same random number
    generator

18
Random Number Generator Singleton
  • public class SingleRandom   private
    SingleRandom() generator new Random()   
    public void setSeed(int seed)
    generator.setSeed(seed)    public int
    nextInt() return generator.nextInt()   
    public static SingleRandom getInstance()
  • return instance   
  • private Random generator   private
    static SingleRandom instance new
  • SingleRandom()

19
The SINGLETON Pattern
  • Context
  • All clients need to access a single shared
    instance of a class.
  • You want to ensure that no additional instances
    can be created accidentally.
  • Solution
  • Define a class with a private constructor.
  • The class constructs a single instance of
    itself.
  • Supply a static method that returns a reference
    to the single instance.
Write a Comment
User Comments (0)
About PowerShow.com