carfield.com.hk ButtonCreator.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.factoryMethod.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ import javax.swing.JButton; import javax.swing.JComponent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; /** * Implements a &lt;i&gt;ConcreteCreator&lt;/i&gt; that creates buttons. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see LabelCreator */ public class ButtonCreator extends Creator { /** * Factory method that creates a button with label and &lt;code&gt; * ActionListener&lt;/code&gt;. * * @returns the created button */ public JComponent createComponent() { final JButton button = new JButton(&quot;Click me!&quot;); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button.setText(&quot;Thank you!&quot;); } }); return button; } /** * Returns a title explaining this example. * * @returns the title for the GUI frame */ public String getTitle() { return &quot;Example1: A JButton&quot;; } } </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z Creator.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.factoryMethod.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JComponent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.Point; /** * Defines the &lt;i&gt;Creator&lt;/i&gt; interface with the &lt;i&gt;factoryMethod()&lt;/i&gt; * method signature and the &lt;i&gt;anOperation()&lt;/i&gt; method that uses it. For * details, see GoF, page 108.&lt;p&gt; * * The factory method is &lt;code&gt;createComponent&lt;/code&gt; and it creates * A JComponent (a button and a label, repsectively). The &lt;i&gt;anOperation()&lt;/i&gt; * method &lt;code&gt;showFrame()&lt;/code&gt; uses the factory method to show a little * GUI. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see ButtonCreator * @see LabelCreator */ public abstract class Creator { /** * The factory method to be concretized by subclasses. * * @returns the created product */ public abstract JComponent createComponent(); /** * Another factory method to create a title for the GUI frame created by * &lt;code&gt;Creator&lt;/code&gt;. * * @returns the title for the GUI frame */ public abstract String getTitle(); /** * the position for the next frame to be created (on the screen) */ private static Point lastFrameLocation = new Point(0, 0); /** * Creates a &lt;code&gt;JFrame&lt;/code&gt;, puts the &lt;code&gt;JComponent&lt;/code&gt; that * is created by the factory method into it and displays the frame. This * Method also provides a &lt;code&gt;WindowListener&lt;/code&gt;. */ public final void showFrame() { JFrame frame = new JFrame(getTitle()); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); JPanel panel = new JPanel(); panel.add(createComponent()); frame.getContentPane().add(panel); frame.pack(); frame.setLocation(lastFrameLocation); lastFrameLocation.translate(75, 75); frame.setVisible(true); } } </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z LabelCreator.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.factoryMethod.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ import javax.swing.JLabel; import javax.swing.JComponent; /** * Implements a &lt;i&gt;ConcreteCreator&lt;/i&gt; that creates labels. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see ButtonCreator */ public class LabelCreator extends Creator { /** * Factory method that creates a button with label and &lt;code&gt; * ActionListener&lt;/code&gt;. * * @returns the created button */ public JComponent createComponent() { JLabel label = new JLabel(&quot;This is a JLabel.&quot;); return label; } /** * Returns a title explaining this example. * * @returns the title for the GUI frame */ public String getTitle() { return &quot;Example2: A JLabel&quot;; } } </TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z Main.java 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.factoryMethod.java; /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the &quot;License&quot;); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an &quot;AS IS&quot; basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ /** * Implements the driver for the FactoryMethod design pattern example.&lt;p&gt; * * Intent: &lt;i&gt;Define an interface for creating an object, but let subclasses * decide which class to instantiate. Factory Method lets a class defer * instantiation to subclasses.&lt;/i&gt;&lt;p&gt; * * Participatng objects are &lt;code&gt;ButtonCreator&lt;/code&gt; and * &lt;code&gt;LabelCreator&lt;/code&gt; as &lt;i&gt;ConcreteCreator&lt;/i&gt;s. Both implement * the &lt;code&gt;Creator&lt;/code&gt; interface.&lt;p&gt; * * In this example, the factory method &lt;code&gt;createComponent&lt;/code&gt; creates * A JComponent (a button and a label, repsectively). The &lt;i&gt;anOperation()&lt;/i&gt; * method &lt;code&gt;showFrame()&lt;/code&gt; uses the factory method to show a little * GUI. In one case, the created frame contains a button, in the other a * simple label. * * &lt;p&gt;&lt;i&gt;This is the Java version.&lt;/i&gt;&lt;p&gt; * * Since the &lt;i&gt;anOperation()&lt;/i&gt; method requires an implementation, &lt;i&gt; * Creator&lt;/i&gt; has to be an abstract class (as opposed to an interface). * Consequently, all &lt;i&gt;ConcreteCreator&lt;/i&gt;s have to be subclasses of * that class and cannot belong to a different inheritance hierarchy. * * @author Jan Hannemann * @author Gregor Kiczales * @version 1.0, 05/13/02 * * @see Creator * @see ButtonCreator * @see LabelCreator */ public class Main { /** * Implements the driver for the FactoryMethod design pattern example.&lt;p&gt; * * In this example, the factory method &lt;code&gt;createComponent&lt;/code&gt; creates * A JComponent (a button and a label, repsectively). The &lt;i&gt;anOperation()&lt;/i&gt; * method &lt;code&gt;showFrame()&lt;/code&gt; uses the factory method to show a little * GUI. In one case, the created frame contains a button, in the other a * simple label. */ public static void main(String[] args) { Creator creator1 = new ButtonCreator(); Creator creator2 = new LabelCreator(); creator1.showFrame(); creator2.showFrame(); } }</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z files.lst 2004-03-24T16:00:00Z 2004-03-24T16:00:00Z <br/><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> 2004-03-24T16:00:00Z