Abstract Factory Pattern Firuza Aibara IIT Bombay 25 August 2012 Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 1 / 20
Outline 1 Introduction 2 Scenario 3 Class Diagram 4 Interface 5 Attribute Class 6 Concrete Factory Classes 7 Abstract Driver Program Initialization/Definition Constructor Item Listener Action Listener Methods for Actions Display 8 What is achieved 9 References Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 2 / 20
Introduction Introduction Factory object that returns one of several group of classes.[1, p. 33]. Used to return any object of a class which in turn can return different objects. E.g. DocumentCreator class to create different documents (letters, reports, resume, thesis, etc.) Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 3 / 20
Scenario Scenario Electronic Device (Computer): Monitor, keyboard, mouse, printer, etc.. Size, color, and type More attributes/specifications can be added later. Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 4 / 20
Class Diagram Class Diagram Fig1: Abstract Factory Pattern Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 5 / 20
Interface Interface Interface / Base Class Defines methods of concrete factory classes Interface interface Computer { public Attribute gettype(); public Attribute getcolor(); public Attribute getsize(); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 6 / 20
Attribute Class Attribute Class Basic Class Returns name invoked by concrete factory class Methods of the concrete classes have return type of this class Attribute class Attribute { private String name; public Attribute(String pname) { name = pname; public String getattribute() { return name; Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 7 / 20
Concrete Factory Classes Concrete Factory Classes - I Subclasses that implements Base Class Returns instance of the basic class with some parameter/value Monitor class Monitor implements Computer { public Attribute gettype() { return new Attribute("LED Monitor"); public Attribute getcolor() { return new Attribute("Black"); public Attribute getsize() { return new Attribute("26 inches"); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 8 / 20
Concrete Factory Classes Concrete Factory Classes - II Speaker class Speaker implements Computer { public Attribute gettype() { return new Attribute("Satellite Speaker"); public Attribute getcolor() { return new Attribute("Pink"); public Attribute getsize() { return new Attribute("Big"); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 9 / 20
Concrete Factory Classes Concrete Factory Classes - III Mouse class Mouse implements Computer { public Attribute gettype() { return new Attribute("Bluetooth Mouse"); public Attribute getcolor() { return new Attribute("Silver"); public Attribute getsize() { return new Attribute("Mini"); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 10 / 20
Abstract Driver Program GUI(Output) - Abstract Driver Program Main Class Contains GUI, Listeners Returns one of the computer objects based on the radio button selected and button clicked Uses Frames Responds to various events(listeners) Invokes methods of the concrete class Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 11 / 20
Abstract Driver Program Initialization/Definition Initialization/Definition Begin public class configuration extends Frame implements ActionListener {... Initialization/Definition private Checkbox monitor, speaker, mouse; private Button Type, Color, Size, Quit; private Computer comp = null; private ComputerPanel cp; private String sizedevice = "", colordevice = "", typedevice = ""; Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 12 / 20
Constructor Abstract Driver Program Constructor Constructor public configuration() { super("abstract Factory Pattern"); setgui(); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 13 / 20
Item Listener - I Abstract Driver Program Item Listener Invoked when radio button is selected Invokes itemstatechanged() Creates object of concrete factory class class MonitorListener implements ItemListener { public void itemstatechanged(itemevent e) { comp = new Monitor(); clearcanvas(); class MouseListener implements ItemListener { public void itemstatechanged(itemevent e) { comp = new Mouse(); clearcanvas(); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 14 / 20
Item Listener - II Abstract Driver Program Item Listener class SpeakerListener implements ItemListener { public void itemstatechanged(itemevent e) { comp = new Speaker(); clearcanvas(); private void clearcanvas() { typedevice = ""; colordevice = ""; sizedevice = ""; cp.repaint(); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 15 / 20
Action Listener Abstract Driver Program Action Listener Invoked when command button is clicked Invokes actionperformed() Calls appropriate internal methods public void actionperformed(actionevent e) { Object obj = e.getsource(); if (obj == Type) settype(); if (obj == Color) setcolor(); if (obj == Size) setsize(); if (obj == Quit) System.exit(0); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 16 / 20
Abstract Driver Program Methods for Actions Methods for Actions Invokes particular method of a particular concrete factory class private void setcolor() { if (comp!= null) colordevice = comp.getcolor().getattribute(); cp.repaint(); private void setsize() { if (comp!= null) sizedevice = comp.getsize().getattribute(); cp.repaint(); private void settype() { if (comp!= null) typedevice = comp.gettype().getattribute(); cp.repaint(); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 17 / 20
Display Abstract Driver Program Display class ComputerPanel extends Panel { public void paint(graphics g) { Dimension sz = getsize(); g.drawrect(0, 0, sz.width - 1, sz.height - 1); g.drawstring("select a device", 50, 20); g.drawstring("click button to view values", 15, 40); g.drawstring(typedevice, 10, 140); g.drawstring(colordevice, 10, 180); g.drawstring(sizedevice, 10, 220); Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 18 / 20
What is achieved What is achieved Avoid hardcoding of individual concrete classes Separates functionality from client s view and code Subclasses(Concrete factory) can be added easily Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 19 / 20
References References [1] James W. Cooper. JAVA TM Design Patterns, A Tutorial. Pearson Education. Nov 1999. pp. 1-24. Indian Reprint 2004 Firuza Aibara (IIT Bombay) Abstract Factory Pattern 25 August 2012 20 / 20