<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FCommand_Pattern</id>
		<title>Java/Design Pattern/Command Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FCommand_Pattern"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Command_Pattern&amp;action=history"/>
		<updated>2026-04-21T15:49:32Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Command_Pattern&amp;diff=7821&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Command_Pattern&amp;diff=7821&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Command_Pattern&amp;diff=7820&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Command_Pattern&amp;diff=7820&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Command Pattern 2 in Java ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.Calendar;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
&lt;br /&gt;
public class RunCommandPattern {&lt;br /&gt;
    private static Calendar dateCreator = Calendar.getInstance();&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the Command pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;This sample will use a command class called&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; ChangeLocationCommand to update the location&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; of an Appointment object.&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;The ChangeLocationCommand has the additional&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; ability to undo and redo commands, so it can&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; set the locaition back to its original value,&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; if desired.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating an Appointment for use in the demo&amp;quot;);&lt;br /&gt;
        Contact [] people = { new ContactImpl(), new ContactImpl() };&lt;br /&gt;
        Appointment appointment = new Appointment(&amp;quot;Java Twister Semi-Finals&amp;quot;,&lt;br /&gt;
            people, new LocationImpl(&amp;quot;&amp;quot;), createDate(2001, 10, 31, 14, 30),&lt;br /&gt;
            createDate(2001, 10, 31, 14, 31));&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating the ChangeLocationCommand&amp;quot;);&lt;br /&gt;
        ChangeLocationCommand cmd = new ChangeLocationCommand();&lt;br /&gt;
        cmd.setAppointment(appointment);&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating the GUI&amp;quot;);&lt;br /&gt;
        CommandGui application = new CommandGui(cmd);&lt;br /&gt;
        application.setAppointment(appointment);&lt;br /&gt;
        cmd.setLocationEditor(application);&lt;br /&gt;
        application.createGui();&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    public static Date createDate(int year, int month, int day, int hour, int minute){&lt;br /&gt;
        dateCreator.set(year, month, day, hour, minute);&lt;br /&gt;
        return dateCreator.getTime();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class CommandGui implements ActionListener, LocationEditor{&lt;br /&gt;
    private JFrame mainFrame;&lt;br /&gt;
    private JTextArea display;&lt;br /&gt;
    private JTextField updatedLocation;&lt;br /&gt;
    private JButton update, undo, redo, exit;&lt;br /&gt;
    private JPanel controlPanel, displayPanel, editorPanel;&lt;br /&gt;
    private UndoableCommand command;&lt;br /&gt;
    private Appointment appointment;&lt;br /&gt;
    &lt;br /&gt;
    public CommandGui(UndoableCommand newCommand){&lt;br /&gt;
        command = newCommand;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void setAppointment(Appointment newAppointment){&lt;br /&gt;
        appointment = newAppointment;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void createGui(){&lt;br /&gt;
        mainFrame = new JFrame(&amp;quot;Command Pattern Example&amp;quot;);&lt;br /&gt;
        Container content = mainFrame.getContentPane();&lt;br /&gt;
        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));&lt;br /&gt;
        &lt;br /&gt;
        editorPanel = new JPanel();&lt;br /&gt;
        editorPanel.add(new JLabel(&amp;quot;Location&amp;quot;));&lt;br /&gt;
        updatedLocation = new JTextField(20);&lt;br /&gt;
        editorPanel.add(updatedLocation);&lt;br /&gt;
        content.add(editorPanel);&lt;br /&gt;
        &lt;br /&gt;
        displayPanel = new JPanel();&lt;br /&gt;
        display = new JTextArea(10, 40);&lt;br /&gt;
        display.setEditable(false);&lt;br /&gt;
        displayPanel.add(display);&lt;br /&gt;
        content.add(displayPanel);&lt;br /&gt;
        &lt;br /&gt;
        controlPanel = new JPanel();&lt;br /&gt;
        update = new JButton(&amp;quot;Update Location&amp;quot;);&lt;br /&gt;
        undo = new JButton(&amp;quot;Undo Location&amp;quot;);&lt;br /&gt;
        redo = new JButton(&amp;quot;Redo Location&amp;quot;);&lt;br /&gt;
        exit = new JButton(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
        controlPanel.add(update);&lt;br /&gt;
        controlPanel.add(undo);&lt;br /&gt;
        controlPanel.add(redo);&lt;br /&gt;
        controlPanel.add(exit);&lt;br /&gt;
        content.add(controlPanel);&lt;br /&gt;
        &lt;br /&gt;
        update.addActionListener(this);&lt;br /&gt;
        undo.addActionListener(this);&lt;br /&gt;
        redo.addActionListener(this);&lt;br /&gt;
        exit.addActionListener(this);&lt;br /&gt;
        &lt;br /&gt;
        refreshDisplay();&lt;br /&gt;
        mainFrame.addWindowListener(new WindowCloseManager());&lt;br /&gt;
        mainFrame.pack();&lt;br /&gt;
        mainFrame.setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void actionPerformed(ActionEvent evt){&lt;br /&gt;
        Object originator = evt.getSource();&lt;br /&gt;
        if (originator == update){&lt;br /&gt;
            executeCommand();&lt;br /&gt;
        }&lt;br /&gt;
        if (originator == undo){&lt;br /&gt;
            undoCommand();&lt;br /&gt;
        }&lt;br /&gt;
        if (originator == redo){&lt;br /&gt;
            redoCommand();&lt;br /&gt;
        }&lt;br /&gt;
        else if (originator == exit){&lt;br /&gt;
            exitApplication();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private class WindowCloseManager extends WindowAdapter{&lt;br /&gt;
        public void windowClosing(WindowEvent evt){&lt;br /&gt;
            exitApplication();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public Location getNewLocation(){&lt;br /&gt;
        return new LocationImpl(updatedLocation.getText());&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void executeCommand(){&lt;br /&gt;
        command.execute();&lt;br /&gt;
        refreshDisplay();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void undoCommand(){&lt;br /&gt;
        command.undo();&lt;br /&gt;
        refreshDisplay();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void redoCommand(){&lt;br /&gt;
        command.redo();&lt;br /&gt;
        refreshDisplay();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void refreshDisplay(){&lt;br /&gt;
        display.setText(appointment.toString());&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void exitApplication(){&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface Command{&lt;br /&gt;
    public void execute();&lt;br /&gt;
}&lt;br /&gt;
interface Contact extends Serializable{&lt;br /&gt;
    public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
    public String getFirstName();&lt;br /&gt;
    public String getLastName();&lt;br /&gt;
    public String getTitle();&lt;br /&gt;
    public String getOrganization();&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName);&lt;br /&gt;
    public void setLastName(String newLastName);&lt;br /&gt;
    public void setTitle(String newTitle);&lt;br /&gt;
    public void setOrganization(String newOrganization);&lt;br /&gt;
}&lt;br /&gt;
class ContactImpl implements Contact{&lt;br /&gt;
    private String firstName;&lt;br /&gt;
    private String lastName;&lt;br /&gt;
    private String title;&lt;br /&gt;
    private String organization;&lt;br /&gt;
    public static final String EOL_STRING =&lt;br /&gt;
        System.getProperty(&amp;quot;line.separator&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    public ContactImpl(){ }&lt;br /&gt;
    public ContactImpl(String newFirstName, String newLastName,&lt;br /&gt;
        String newTitle, String newOrganization){&lt;br /&gt;
            firstName = newFirstName;&lt;br /&gt;
            lastName = newLastName;&lt;br /&gt;
            title = newTitle;&lt;br /&gt;
            organization = newOrganization;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getFirstName(){ return firstName; }&lt;br /&gt;
    public String getLastName(){ return lastName; }&lt;br /&gt;
    public String getTitle(){ return title; }&lt;br /&gt;
    public String getOrganization(){ return organization; }&lt;br /&gt;
    &lt;br /&gt;
    public void setFirstName(String newFirstName){ firstName = newFirstName; }&lt;br /&gt;
    public void setLastName(String newLastName){ lastName = newLastName; }&lt;br /&gt;
    public void setTitle(String newTitle){ title = newTitle; }&lt;br /&gt;
    public void setOrganization(String newOrganization){ organization = newOrganization; }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return firstName + &amp;quot; &amp;quot; + lastName;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Appointment{&lt;br /&gt;
    private String reason;&lt;br /&gt;
    private Contact[] contacts;&lt;br /&gt;
    private Location location;&lt;br /&gt;
    private Date startDate;&lt;br /&gt;
    private Date endDate;&lt;br /&gt;
    public Appointment(String reason, Contact[] contacts, Location location, Date startDate, Date endDate){&lt;br /&gt;
        this.reason = reason;&lt;br /&gt;
        this.contacts = contacts;&lt;br /&gt;
        this.location = location;&lt;br /&gt;
        this.startDate = startDate;&lt;br /&gt;
        this.endDate = endDate;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getReason(){ return reason; }&lt;br /&gt;
    public Contact[] getContacts(){ return contacts; }&lt;br /&gt;
    public Location getLocation(){ return location; }&lt;br /&gt;
    public Date getStartDate(){ return startDate; }&lt;br /&gt;
    public Date getEndDate(){ return endDate; }&lt;br /&gt;
    &lt;br /&gt;
    public void setLocation(Location location){ this.location = location; }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){&lt;br /&gt;
        return &amp;quot;Appointment:&amp;quot; + &amp;quot;\n    Reason: &amp;quot; + reason +&lt;br /&gt;
    &amp;quot;\n    Location: &amp;quot; + location + &amp;quot;\n    Start: &amp;quot; +&lt;br /&gt;
            startDate + &amp;quot;\n    End: &amp;quot; + endDate + &amp;quot;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface Location extends Serializable{&lt;br /&gt;
    public String getLocation();&lt;br /&gt;
    public void setLocation(String newLocation);&lt;br /&gt;
}&lt;br /&gt;
class ChangeLocationCommand implements UndoableCommand{&lt;br /&gt;
    private Appointment appointment;&lt;br /&gt;
    private Location oldLocation;&lt;br /&gt;
    private Location newLocation;&lt;br /&gt;
    private LocationEditor editor;&lt;br /&gt;
    &lt;br /&gt;
    public Appointment getAppointment(){ return appointment; }&lt;br /&gt;
    &lt;br /&gt;
    public void setAppointment(Appointment appointment){ this.appointment = appointment; }&lt;br /&gt;
    public void setLocationEditor(LocationEditor locationEditor){ editor = locationEditor; }&lt;br /&gt;
    &lt;br /&gt;
    public void execute(){&lt;br /&gt;
        oldLocation = appointment.getLocation();&lt;br /&gt;
        newLocation = editor.getNewLocation();&lt;br /&gt;
        appointment.setLocation(newLocation);&lt;br /&gt;
    }&lt;br /&gt;
    public void undo(){&lt;br /&gt;
        appointment.setLocation(oldLocation);&lt;br /&gt;
    }&lt;br /&gt;
    public void redo(){&lt;br /&gt;
        appointment.setLocation(newLocation);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface LocationEditor{&lt;br /&gt;
    public Location getNewLocation();&lt;br /&gt;
}&lt;br /&gt;
class LocationImpl implements Location{&lt;br /&gt;
    private String location;&lt;br /&gt;
    &lt;br /&gt;
    public LocationImpl(){ }&lt;br /&gt;
    public LocationImpl(String newLocation){&lt;br /&gt;
        location = newLocation;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getLocation(){ return location; }&lt;br /&gt;
    &lt;br /&gt;
    public void setLocation(String newLocation){ location = newLocation; }&lt;br /&gt;
    &lt;br /&gt;
    public String toString(){ return location; }&lt;br /&gt;
}&lt;br /&gt;
interface UndoableCommand extends Command{&lt;br /&gt;
    public void undo();&lt;br /&gt;
    public void redo();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command Pattern - Example: FTP GUI ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Software Architecture Design Patterns in Java&lt;br /&gt;
by Partha Kuchana &lt;br /&gt;
Auerbach Publications&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.GridBagConstraints;&lt;br /&gt;
import java.awt.GridBagLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.DefaultListModel;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JList;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.ListSelectionModel;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;&lt;br /&gt;
public class FTPGUI extends JFrame {&lt;br /&gt;
  public static final String newline = &amp;quot;\n&amp;quot;;&lt;br /&gt;
  public static final String UPLOAD = &amp;quot;Upload&amp;quot;;&lt;br /&gt;
  public static final String DOWNLOAD = &amp;quot;Download&amp;quot;;&lt;br /&gt;
  public static final String DELETE = &amp;quot;Delete&amp;quot;;&lt;br /&gt;
  public static final String EXIT = &amp;quot;Exit&amp;quot;;&lt;br /&gt;
  private JPanel pnlFTPUI;&lt;br /&gt;
  private JList localList;&lt;br /&gt;
  private JList remoteList;&lt;br /&gt;
  private DefaultListModel defLocalList, defRemoteList;&lt;br /&gt;
  private UploadButton btnUpload;&lt;br /&gt;
  private DownloadButton btnDownload;&lt;br /&gt;
  private DeleteButton btnDelete;&lt;br /&gt;
  public FTPGUI() throws Exception {&lt;br /&gt;
    super(&amp;quot;Command Pattern - Example&amp;quot;);&lt;br /&gt;
    // Create controls&lt;br /&gt;
    defLocalList = new DefaultListModel();&lt;br /&gt;
    defRemoteList = new DefaultListModel();&lt;br /&gt;
    localList = new JList(defLocalList);&lt;br /&gt;
    remoteList = new JList(defRemoteList);&lt;br /&gt;
    pnlFTPUI = new JPanel();&lt;br /&gt;
    localList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);&lt;br /&gt;
    localList.setSelectedIndex(-1);&lt;br /&gt;
    JScrollPane spLocalList = new JScrollPane(localList);&lt;br /&gt;
    remoteList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);&lt;br /&gt;
    remoteList.setSelectedIndex(-1);&lt;br /&gt;
    JScrollPane spRemoteList = new JScrollPane(remoteList);&lt;br /&gt;
    //Create Labels&lt;br /&gt;
    JLabel lblLocalList = new JLabel(&amp;quot;Local List:&amp;quot;);&lt;br /&gt;
    JLabel lblRemoteList = new JLabel(&amp;quot;Remote List:&amp;quot;);&lt;br /&gt;
    JLabel lblSpacer = new JLabel(&amp;quot;         &amp;quot;);&lt;br /&gt;
    //Create buttons&lt;br /&gt;
    btnUpload = new UploadButton(FTPGUI.UPLOAD);&lt;br /&gt;
    btnUpload.setMnemonic(KeyEvent.VK_U);&lt;br /&gt;
    btnDownload = new DownloadButton(FTPGUI.DOWNLOAD);&lt;br /&gt;
    btnDownload.setMnemonic(KeyEvent.VK_N);&lt;br /&gt;
    btnDelete = new DeleteButton(FTPGUI.DELETE);&lt;br /&gt;
    btnDelete.setMnemonic(KeyEvent.VK_D);&lt;br /&gt;
    ExitButton btnExit = new ExitButton(FTPGUI.EXIT);&lt;br /&gt;
    btnExit.setMnemonic(KeyEvent.VK_X);&lt;br /&gt;
    buttonHandler vf = new buttonHandler();&lt;br /&gt;
    btnUpload.addActionListener(vf);&lt;br /&gt;
    btnDownload.addActionListener(vf);&lt;br /&gt;
    btnDelete.addActionListener(vf);&lt;br /&gt;
    btnExit.addActionListener(vf);&lt;br /&gt;
    JPanel lstPanel = new JPanel();&lt;br /&gt;
    GridBagLayout gridbag2 = new GridBagLayout();&lt;br /&gt;
    lstPanel.setLayout(gridbag2);&lt;br /&gt;
    GridBagConstraints gbc2 = new GridBagConstraints();&lt;br /&gt;
    lstPanel.add(lblLocalList);&lt;br /&gt;
    lstPanel.add(lblRemoteList);&lt;br /&gt;
    lstPanel.add(spLocalList);&lt;br /&gt;
    lstPanel.add(spRemoteList);&lt;br /&gt;
    lstPanel.add(lblSpacer);&lt;br /&gt;
    gbc2.gridx = 0;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(lblLocalList, gbc2);&lt;br /&gt;
    gbc2.gridx = 1;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(lblSpacer, gbc2);&lt;br /&gt;
    gbc2.gridx = 5;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(lblRemoteList, gbc2);&lt;br /&gt;
    gbc2.gridx = 0;&lt;br /&gt;
    gbc2.gridy = 1;&lt;br /&gt;
    gridbag2.setConstraints(spLocalList, gbc2);&lt;br /&gt;
    gbc2.gridx = 5;&lt;br /&gt;
    gbc2.gridy = 1;&lt;br /&gt;
    gridbag2.setConstraints(spRemoteList, gbc2);&lt;br /&gt;
    //-----------------------------------&lt;br /&gt;
    //For layout purposes, put the buttons in a separate panel&lt;br /&gt;
    JPanel buttonPanel = new JPanel();&lt;br /&gt;
    //----------------------------------------------&lt;br /&gt;
    GridBagLayout gridbag = new GridBagLayout();&lt;br /&gt;
    buttonPanel.setLayout(gridbag);&lt;br /&gt;
    GridBagConstraints gbc = new GridBagConstraints();&lt;br /&gt;
    buttonPanel.add(lstPanel);&lt;br /&gt;
    buttonPanel.add(btnUpload);&lt;br /&gt;
    buttonPanel.add(btnDownload);&lt;br /&gt;
    buttonPanel.add(btnDelete);&lt;br /&gt;
    buttonPanel.add(btnExit);&lt;br /&gt;
    gbc.insets.top = 5;&lt;br /&gt;
    gbc.insets.bottom = 5;&lt;br /&gt;
    gbc.insets.left = 5;&lt;br /&gt;
    gbc.insets.right = 5;&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(btnUpload, gbc);&lt;br /&gt;
    gbc.gridx = 2;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(btnDownload, gbc);&lt;br /&gt;
    gbc.gridx = 3;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(btnDelete, gbc);&lt;br /&gt;
    gbc.gridx = 4;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(btnExit, gbc);&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 1;&lt;br /&gt;
    gridbag.setConstraints(lstPanel, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.insets.left = 2;&lt;br /&gt;
    gbc.insets.right = 2;&lt;br /&gt;
    gbc.insets.top = 40;&lt;br /&gt;
    //****************************************************&lt;br /&gt;
    //Add the buttons and the log to the frame&lt;br /&gt;
    Container contentPane = getContentPane();&lt;br /&gt;
    contentPane.add(lstPanel, BorderLayout.CENTER);&lt;br /&gt;
    contentPane.add(buttonPanel, BorderLayout.SOUTH);&lt;br /&gt;
    initialize();&lt;br /&gt;
    try {&lt;br /&gt;
      UIManager.setLookAndFeel(new WindowsLookAndFeel());&lt;br /&gt;
      SwingUtilities.updateComponentTreeUI(FTPGUI.this);&lt;br /&gt;
    } catch (Exception ex) {&lt;br /&gt;
      System.out.println(ex);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private void initialize() {&lt;br /&gt;
    // fill some test data here into the listbox.&lt;br /&gt;
    defLocalList.addElement(&amp;quot;first.html&amp;quot;);&lt;br /&gt;
    defLocalList.addElement(&amp;quot;second.html&amp;quot;);&lt;br /&gt;
    defLocalList.addElement(&amp;quot;third.html&amp;quot;);&lt;br /&gt;
    defLocalList.addElement(&amp;quot;fourth.html&amp;quot;);&lt;br /&gt;
    defLocalList.addElement(&amp;quot;fifth.html&amp;quot;);&lt;br /&gt;
    defLocalList.addElement(&amp;quot;Design Patterns 1.html&amp;quot;);&lt;br /&gt;
    defRemoteList.addElement(&amp;quot;sixth.html&amp;quot;);&lt;br /&gt;
    defRemoteList.addElement(&amp;quot;seventh.html&amp;quot;);&lt;br /&gt;
    defRemoteList.addElement(&amp;quot;eighth.html&amp;quot;);&lt;br /&gt;
    defRemoteList.addElement(&amp;quot;ninth.html&amp;quot;);&lt;br /&gt;
    defRemoteList.addElement(&amp;quot;Design Patterns 2.html&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    JFrame frame = new FTPGUI();&lt;br /&gt;
    frame.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    //frame.pack();&lt;br /&gt;
    frame.setSize(450, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  class buttonHandler implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      CommandInterface CommandObj = (CommandInterface) e.getSource();&lt;br /&gt;
      CommandObj.processEvent();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  interface CommandInterface {&lt;br /&gt;
    public void processEvent();&lt;br /&gt;
  }&lt;br /&gt;
  class UploadButton extends JButton implements CommandInterface {&lt;br /&gt;
    public void processEvent() {&lt;br /&gt;
      int index = localList.getSelectedIndex();&lt;br /&gt;
      String selectedItem = localList.getSelectedValue().toString();&lt;br /&gt;
      ((DefaultListModel) localList.getModel()).remove(index);&lt;br /&gt;
      ((DefaultListModel) remoteList.getModel()).addElement(selectedItem);&lt;br /&gt;
    }&lt;br /&gt;
    public UploadButton(String name) {&lt;br /&gt;
      super(name);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class DownloadButton extends JButton implements CommandInterface {&lt;br /&gt;
    public void processEvent() {&lt;br /&gt;
      int index = remoteList.getSelectedIndex();&lt;br /&gt;
      String selectedItem = remoteList.getSelectedValue().toString();&lt;br /&gt;
      ((DefaultListModel) remoteList.getModel()).remove(index);&lt;br /&gt;
      ((DefaultListModel) localList.getModel()).addElement(selectedItem);&lt;br /&gt;
    }&lt;br /&gt;
    public DownloadButton(String name) {&lt;br /&gt;
      super(name);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class DeleteButton extends JButton implements CommandInterface {&lt;br /&gt;
    public void processEvent() {&lt;br /&gt;
      int index = localList.getSelectedIndex();&lt;br /&gt;
      if (index &amp;gt;= 0) {&lt;br /&gt;
        ((DefaultListModel) localList.getModel()).remove(index);&lt;br /&gt;
      }&lt;br /&gt;
      index = remoteList.getSelectedIndex();&lt;br /&gt;
      if (index &amp;gt;= 0) {&lt;br /&gt;
        ((DefaultListModel) remoteList.getModel()).remove(index);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public DeleteButton(String name) {&lt;br /&gt;
      super(name);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class ExitButton extends JButton implements CommandInterface {&lt;br /&gt;
    public void processEvent() {&lt;br /&gt;
      System.exit(1);&lt;br /&gt;
    }&lt;br /&gt;
    public ExitButton(String name) {&lt;br /&gt;
      super(name);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}// end of class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command pattern in Java 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.FileDialog;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Menu;&lt;br /&gt;
import java.awt.MenuBar;&lt;br /&gt;
import java.awt.MenuItem;&lt;br /&gt;
import java.awt.Panel;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
public class ActionCommand extends Frame {&lt;br /&gt;
  Menu mnuFile;&lt;br /&gt;
  MenuItem mnuOpen, mnuExit;&lt;br /&gt;
  Button btnRed;&lt;br /&gt;
  Panel p;&lt;br /&gt;
  Frame fr;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public ActionCommand() {&lt;br /&gt;
    super(&amp;quot;Frame without commands&amp;quot;);&lt;br /&gt;
    fr = this; //sae cop of this frame&lt;br /&gt;
    MenuBar mbar = new MenuBar();&lt;br /&gt;
    setMenuBar(mbar);&lt;br /&gt;
    mnuFile = new Menu(&amp;quot;File&amp;quot;, true);&lt;br /&gt;
    mbar.add(mnuFile);&lt;br /&gt;
    mnuOpen = new MenuItem(&amp;quot;Open...&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuOpen);&lt;br /&gt;
    mnuExit = new MenuItem(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuExit);&lt;br /&gt;
    mnuOpen.addActionListener(new fileOpen());&lt;br /&gt;
    mnuExit.addActionListener(new fileExit());&lt;br /&gt;
    btnRed = new Button(&amp;quot;Red&amp;quot;);&lt;br /&gt;
    p = new Panel();&lt;br /&gt;
    add(p);&lt;br /&gt;
    p.add(btnRed);&lt;br /&gt;
    btnRed.addActionListener(new btnRed());&lt;br /&gt;
    setBounds(100, 100, 200, 100);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  private void exitClicked() {&lt;br /&gt;
    System.exit(0);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new ActionCommand();&lt;br /&gt;
  }&lt;br /&gt;
  //=====----====--inner classes---=====----&lt;br /&gt;
  class fileOpen implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      FileDialog fDlg = new FileDialog(fr, &amp;quot;Open a file&amp;quot;, FileDialog.LOAD);&lt;br /&gt;
      fDlg.show();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //-------------------------------------&lt;br /&gt;
  class btnRed implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      p.setBackground(Color.red);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //-------------------------------------&lt;br /&gt;
  class fileExit implements ActionListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//=====================================&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command pattern in Java 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.FileDialog;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Menu;&lt;br /&gt;
import java.awt.MenuBar;&lt;br /&gt;
import java.awt.MenuItem;&lt;br /&gt;
import java.awt.Panel;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
interface Command {&lt;br /&gt;
  public void Execute();&lt;br /&gt;
}&lt;br /&gt;
public class TestCommand extends Frame implements ActionListener {&lt;br /&gt;
  Menu mnuFile;&lt;br /&gt;
  fileOpenCommand mnuOpen;&lt;br /&gt;
  fileExitCommand mnuExit;&lt;br /&gt;
  btnRedCommand btnRed;&lt;br /&gt;
  Panel p;&lt;br /&gt;
  Frame fr;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public TestCommand() {&lt;br /&gt;
    super(&amp;quot;Frame without commands&amp;quot;);&lt;br /&gt;
    fr = this; //save frame object&lt;br /&gt;
    MenuBar mbar = new MenuBar();&lt;br /&gt;
    setMenuBar(mbar);&lt;br /&gt;
    mnuFile = new Menu(&amp;quot;File&amp;quot;, true);&lt;br /&gt;
    mbar.add(mnuFile);&lt;br /&gt;
    mnuOpen = new fileOpenCommand(&amp;quot;Open...&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuOpen);&lt;br /&gt;
    mnuExit = new fileExitCommand(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuExit);&lt;br /&gt;
    mnuOpen.addActionListener(this);&lt;br /&gt;
    mnuExit.addActionListener(this);&lt;br /&gt;
    btnRed = new btnRedCommand(&amp;quot;Red&amp;quot;);&lt;br /&gt;
    p = new Panel();&lt;br /&gt;
    add(p);&lt;br /&gt;
    p.add(btnRed);&lt;br /&gt;
    btnRed.addActionListener(this);&lt;br /&gt;
    setBounds(100, 100, 200, 100);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    Command obj = (Command) e.getSource();&lt;br /&gt;
    obj.Execute();&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new TestCommand();&lt;br /&gt;
  }&lt;br /&gt;
  //====----====-----inner class----=====----&lt;br /&gt;
  class btnRedCommand extends Button implements Command {&lt;br /&gt;
    public btnRedCommand(String caption) {&lt;br /&gt;
      super(caption);&lt;br /&gt;
    }&lt;br /&gt;
    public void Execute() {&lt;br /&gt;
      p.setBackground(Color.red);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //------------------------------------------&lt;br /&gt;
  class fileOpenCommand extends MenuItem implements Command {&lt;br /&gt;
    public fileOpenCommand(String caption) {&lt;br /&gt;
      super(caption);&lt;br /&gt;
    }&lt;br /&gt;
    public void Execute() {&lt;br /&gt;
      FileDialog fDlg = new FileDialog(fr, &amp;quot;Open file&amp;quot;);&lt;br /&gt;
      fDlg.show();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //-------------------------------------------&lt;br /&gt;
  class fileExitCommand extends MenuItem implements Command {&lt;br /&gt;
    public fileExitCommand(String caption) {&lt;br /&gt;
      super(caption);&lt;br /&gt;
    }&lt;br /&gt;
    public void Execute() {&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//==========================================&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command pattern in Java 3 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.FileDialog;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Menu;&lt;br /&gt;
import java.awt.MenuBar;&lt;br /&gt;
import java.awt.MenuItem;&lt;br /&gt;
import java.awt.Panel;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
interface Command {&lt;br /&gt;
  public void Execute();&lt;br /&gt;
}&lt;br /&gt;
public class ExtrnCommand extends Frame implements ActionListener {&lt;br /&gt;
  Menu mnuFile;&lt;br /&gt;
  fileOpenCommand mnuOpen;&lt;br /&gt;
  fileExitCommand mnuExit;&lt;br /&gt;
  btnRedCommand btnRed;&lt;br /&gt;
  Panel p;&lt;br /&gt;
  Frame fr;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public ExtrnCommand() {&lt;br /&gt;
    super(&amp;quot;Frame with external commands&amp;quot;);&lt;br /&gt;
    fr = this; //save frame object&lt;br /&gt;
    MenuBar mbar = new MenuBar();&lt;br /&gt;
    setMenuBar(mbar);&lt;br /&gt;
    mnuFile = new Menu(&amp;quot;File&amp;quot;, true);&lt;br /&gt;
    mbar.add(mnuFile);&lt;br /&gt;
    mnuOpen = new fileOpenCommand(&amp;quot;Open...&amp;quot;, this);&lt;br /&gt;
    mnuFile.add(mnuOpen);&lt;br /&gt;
    mnuExit = new fileExitCommand(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuExit);&lt;br /&gt;
    mnuOpen.addActionListener(this);&lt;br /&gt;
    mnuExit.addActionListener(this);&lt;br /&gt;
    p = new Panel();&lt;br /&gt;
    add(p);&lt;br /&gt;
    btnRed = new btnRedCommand(&amp;quot;Red&amp;quot;, p);&lt;br /&gt;
    p.add(btnRed);&lt;br /&gt;
    btnRed.addActionListener(this);&lt;br /&gt;
    setBounds(100, 100, 200, 100);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    Command obj = (Command) e.getSource();&lt;br /&gt;
    obj.Execute();&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new ExtrnCommand();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//==========================================&lt;br /&gt;
class btnRedCommand extends Button implements Command {&lt;br /&gt;
  Panel p;&lt;br /&gt;
  public btnRedCommand(String caption, Panel pnl) {&lt;br /&gt;
    super(caption);&lt;br /&gt;
    p = pnl;&lt;br /&gt;
  }&lt;br /&gt;
  public void Execute() {&lt;br /&gt;
    p.setBackground(Color.red);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//------------------------------------------&lt;br /&gt;
class fileOpenCommand extends MenuItem implements Command {&lt;br /&gt;
  Frame fr;&lt;br /&gt;
  public fileOpenCommand(String caption, Frame frm) {&lt;br /&gt;
    super(caption);&lt;br /&gt;
    fr = frm;&lt;br /&gt;
  }&lt;br /&gt;
  public void Execute() {&lt;br /&gt;
    FileDialog fDlg = new FileDialog(fr, &amp;quot;Open file&amp;quot;);&lt;br /&gt;
    fDlg.show();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//-------------------------------------------&lt;br /&gt;
class fileExitCommand extends MenuItem implements Command {&lt;br /&gt;
  public fileExitCommand(String caption) {&lt;br /&gt;
    super(caption);&lt;br /&gt;
  }&lt;br /&gt;
  public void Execute() {&lt;br /&gt;
    System.exit(0);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command pattern in Java 4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.FileDialog;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Menu;&lt;br /&gt;
import java.awt.MenuBar;&lt;br /&gt;
import java.awt.MenuItem;&lt;br /&gt;
import java.awt.Panel;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
public class InnerCommand extends Frame {&lt;br /&gt;
  Menu mnuFile;&lt;br /&gt;
  MenuItem mnuOpen, mnuExit;&lt;br /&gt;
  Button btnRed;&lt;br /&gt;
  Panel p;&lt;br /&gt;
  Frame fr;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public InnerCommand() {&lt;br /&gt;
    super(&amp;quot;Frame without commands&amp;quot;);&lt;br /&gt;
    fr = this;&lt;br /&gt;
    MenuBar mbar = new MenuBar();&lt;br /&gt;
    setMenuBar(mbar);&lt;br /&gt;
    mnuFile = new Menu(&amp;quot;File&amp;quot;, true);&lt;br /&gt;
    mbar.add(mnuFile);&lt;br /&gt;
    mnuOpen = new MenuItem(&amp;quot;Open...&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuOpen);&lt;br /&gt;
    mnuExit = new MenuItem(&amp;quot;Exit&amp;quot;);&lt;br /&gt;
    mnuFile.add(mnuExit);&lt;br /&gt;
    mnuOpen.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        FileDialog fDlg = new FileDialog(fr, &amp;quot;Open a file&amp;quot;,&lt;br /&gt;
            FileDialog.LOAD);&lt;br /&gt;
        fDlg.show();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    mnuExit.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    btnRed = new Button(&amp;quot;Red&amp;quot;);&lt;br /&gt;
    p = new Panel();&lt;br /&gt;
    add(p);&lt;br /&gt;
    p.add(btnRed);&lt;br /&gt;
    btnRed.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        p.setBackground(Color.red);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    setBounds(100, 100, 200, 100);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new InnerCommand();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//=====================================&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command pattern: Shopping ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Software Architecture Design Patterns in Java&lt;br /&gt;
by Partha Kuchana &lt;br /&gt;
Auerbach Publications&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
public class CommandTest {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    //Add an item to the CD category&lt;br /&gt;
    //create Receiver objects&lt;br /&gt;
    Item CD = new Item(&amp;quot;A Beautiful Mind&amp;quot;);&lt;br /&gt;
    Category catCD = new Category(&amp;quot;CD&amp;quot;);&lt;br /&gt;
    //create the command object&lt;br /&gt;
    CommandInterface command = new AddCommand(CD, catCD);&lt;br /&gt;
    //create the invoker&lt;br /&gt;
    ItemManager manager = new ItemManager();&lt;br /&gt;
    //configure the invoker&lt;br /&gt;
    //with the command object&lt;br /&gt;
    manager.setCommand(command);&lt;br /&gt;
    manager.process();&lt;br /&gt;
    //Add an item to the CD category&lt;br /&gt;
    CD = new Item(&amp;quot;Duet&amp;quot;);&lt;br /&gt;
    catCD = new Category(&amp;quot;CD&amp;quot;);&lt;br /&gt;
    command = new AddCommand(CD, catCD);&lt;br /&gt;
    manager.setCommand(command);&lt;br /&gt;
    manager.process();&lt;br /&gt;
    //Add an item to the New Releases category&lt;br /&gt;
    CD = new Item(&amp;quot;Duet&amp;quot;);&lt;br /&gt;
    catCD = new Category(&amp;quot;New Releases&amp;quot;);&lt;br /&gt;
    command = new AddCommand(CD, catCD);&lt;br /&gt;
    manager.setCommand(command);&lt;br /&gt;
    manager.process();&lt;br /&gt;
    //Delete an item from the New Releases category&lt;br /&gt;
    command = new DeleteCommand(CD, catCD);&lt;br /&gt;
    manager.setCommand(command);&lt;br /&gt;
    manager.process();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ItemManager {&lt;br /&gt;
  CommandInterface command;&lt;br /&gt;
  public void setCommand(CommandInterface c) {&lt;br /&gt;
    command = c;&lt;br /&gt;
  }&lt;br /&gt;
  public void process() {&lt;br /&gt;
    command.execute();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Item {&lt;br /&gt;
  private HashMap categories;&lt;br /&gt;
  private String desc;&lt;br /&gt;
  public Item(String s) {&lt;br /&gt;
    desc = s;&lt;br /&gt;
    categories = new HashMap();&lt;br /&gt;
  }&lt;br /&gt;
  public String getDesc() {&lt;br /&gt;
    return desc;&lt;br /&gt;
  }&lt;br /&gt;
  public void add(Category cat) {&lt;br /&gt;
    categories.put(cat.getDesc(), cat);&lt;br /&gt;
  }&lt;br /&gt;
  public void delete(Category cat) {&lt;br /&gt;
    categories.remove(cat.getDesc());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DeleteCommand implements CommandInterface {&lt;br /&gt;
  Item item;&lt;br /&gt;
  Category cat;&lt;br /&gt;
  public DeleteCommand(Item i, Category c) {&lt;br /&gt;
    item = i;&lt;br /&gt;
    cat = c;&lt;br /&gt;
  }&lt;br /&gt;
  public void execute() {&lt;br /&gt;
    item.delete(cat);&lt;br /&gt;
    cat.delete(item);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface CommandInterface {&lt;br /&gt;
  public void execute();&lt;br /&gt;
}&lt;br /&gt;
class Category {&lt;br /&gt;
  private HashMap items;&lt;br /&gt;
  private String desc;&lt;br /&gt;
  public Category(String s) {&lt;br /&gt;
    desc = s;&lt;br /&gt;
    items = new HashMap();&lt;br /&gt;
  }&lt;br /&gt;
  public String getDesc() {&lt;br /&gt;
    return desc;&lt;br /&gt;
  }&lt;br /&gt;
  public void add(Item i) {&lt;br /&gt;
    items.put(i.getDesc(), i);&lt;br /&gt;
    System.out.println(&amp;quot;Item &amp;quot;&amp;quot; + i.getDesc() + &amp;quot;&amp;quot; has been added to the &amp;quot;&amp;quot;&lt;br /&gt;
        + getDesc() + &amp;quot;&amp;quot; Category &amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void delete(Item i) {&lt;br /&gt;
    items.remove(i.getDesc());&lt;br /&gt;
    System.out.println(&amp;quot;Item &amp;quot;&amp;quot; + i.getDesc()&lt;br /&gt;
        + &amp;quot;&amp;quot; has been deleted from the &amp;quot;&amp;quot; + getDesc() + &amp;quot;&amp;quot; Category &amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class AddCommand implements CommandInterface {&lt;br /&gt;
  Item item;&lt;br /&gt;
  Category cat;&lt;br /&gt;
  public AddCommand(Item i, Category c) {&lt;br /&gt;
    item = i;&lt;br /&gt;
    cat = c;&lt;br /&gt;
  }&lt;br /&gt;
  public void execute() {&lt;br /&gt;
    item.add(cat);&lt;br /&gt;
    cat.add(item);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>