Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing Factory Pattern in Java
    text
    copied!<p>I am studying the Factory pattern and I have some doubts about which is the best way to buil it. I developed two progamas that do exactly the same, the only difference is the code that implements the pattern in question. After comparison could help me find:</p> <ol> <li>Code which one is better for reusability, for the JVM, for performance, etc, number 1 or 2?<br></li> <li>Is a 3.er optimal way to do even more?</li> </ol> <p><strong>Shared Classes</strong></p> <p><strong>Artist</strong></p> <pre><code> public class ArtistFrame extends AbstractFactoryJInternalFrame { public ArtistFrame(String title, int x, int y) { super(title, x, y); } @Override void makeButtons() { JButton addBtn = new JButton("Add"); addBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton saveBtn = new JButton("Save"); saveBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton deleteBtn = new JButton("Delete"); deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton cancelBtn = new JButton("Cancel"); cancelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); add(addBtn, BorderLayout.SOUTH); add(saveBtn, BorderLayout.NORTH); add(deleteBtn, BorderLayout.EAST); add(cancelBtn, BorderLayout.WEST); } } </code></pre> <p><strong>Track</strong></p> <pre><code>public class TrackFrame extends AbstractFactoryJInternalFrame { public TrackFrame(String title, int x, int y) { super(title, x, y); } @Override void makeButtons() { JButton addBtn = new JButton("Add"); addBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton saveBtn = new JButton("Save"); saveBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton deleteBtn = new JButton("Delete"); deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton cancelBtn = new JButton("Cancel"); cancelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); add(addBtn, BorderLayout.NORTH); add(saveBtn, BorderLayout.CENTER); add(deleteBtn, BorderLayout.EAST); add(cancelBtn,BorderLayout.WEST); } } </code></pre> <p><strong>Album</strong></p> <pre><code>public class AlbumFrame extends AbstractFactoryJInternalFrame { public AlbumFrame(String title, int x, int y) { super(title, x, y); } @Override void makeButtons() { JButton addBtn = new JButton("Add"); addBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton saveBtn = new JButton("Save"); saveBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton deleteBtn = new JButton("Delete"); deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); JButton cancelBtn = new JButton("Cancel"); cancelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { //to do } }); add(addBtn, BorderLayout.EAST); add(saveBtn, BorderLayout.WEST); add(deleteBtn, BorderLayout.NORTH); add(cancelBtn, BorderLayout.SOUTH); } } </code></pre> <p><strong>Case 1</strong><br> Main Class</p> <pre><code>public class TestSwing extends JFrame { JDesktopPane desktop; AbstractFactoryJInternalFrame artistFrame; AbstractFactoryJInternalFrame albumFrame; AbstractFactoryJInternalFrame trackFrame; public TestSwing() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(500,300); desktop = new JDesktopPane(); artistFrame = AbstractFactoryJInternalFrame.getFrame("Artist",10,10); albumFrame = AbstractFactoryJInternalFrame.getFrame("Album", 20, 20); trackFrame = AbstractFactoryJInternalFrame.getFrame("Track", 30,30); desktop.add(artistFrame); desktop.add(albumFrame); desktop.add(trackFrame); setContentPane(desktop); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TestSwing ts = new TestSwing(); } }); } } </code></pre> <p>Factory Class public abstract class AbstractFactoryJInternalFrame extends JInternalFrame {</p> <pre><code>protected AbstractFactoryJInternalFrame(String title, int x, int y) { super(title, true, true, true, true); setLocation(y,y); } public static AbstractFactoryJInternalFrame getFrame(String title, int x, int y) { AbstractFactoryJInternalFrame frame = null; if (title.equals("Artist")) { frame = new ArtistFrame(title, x, y); } else if (title.equals("Album")) { frame = new AlbumFrame(title, x, y); } else { frame = new TrackFrame(title, x, y); } frame.makeButtons(); frame.pack(); frame.setVisible(true); return frame; } abstract void makeButtons(); } </code></pre> <p><strong>Case 2</strong><br> Main Class</p> <pre><code>public class TestSwing extends JFrame { JDesktopPane desktop; AbstractFactoryJInternalFrame artistFrame; AbstractFactoryJInternalFrame albumFrame; AbstractFactoryJInternalFrame trackFrame; public TestSwing() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(500,300); desktop = new JDesktopPane(); artistFrame = new ArtistFrame("Arist",10,10); albumFrame = new AlbumFrame("Album", 20, 20); trackFrame = new TrackFrame("Track", 30,30); desktop.add(artistFrame); desktop.add(albumFrame); desktop.add(trackFrame); setContentPane(desktop); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TestSwing ts = new TestSwing(); } }); } } </code></pre> <p>Factory Class</p> <pre><code> public abstract class AbstractFactoryJInternalFrame extends JInternalFrame { protected AbstractFactoryJInternalFrame(String title, int x, int y) { super(title, true, true, true, true); setLocation(y,y); makeButtons(); pack(); setVisible(true); } abstract void makeButtons(); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload