Pub-Sub Pattern Initialization Indirect Communication: Publisher- Subscriber

Ivan Marsic • Rutgers University 172 be flushed. Obviously, this does not provide for long-term archiving of the commands; if that is required, the archive should be maintained independently of the undoredo caches. It is common to use Command pattern in operating across the Internet. For example, suppose that client code needs to make a function call on an object of a class residing on a remote server. It is not possible for the client code to make an ordinary method call on this object because the remote object cannot appear in the usual compile-execute process. It is also difficult to employ remote method invocation RMI here because we often cannot prepare client and server in advance, except to give the client specification of the servlet’s file name. Instead, the call is made from the client by pointing the browser to the file containing the servlet. The servlet then calls its serviceHttpServletRequest, HttpServletResponse method. The object HttpServletRequest includes all the information that a method invocation requires, such as argument values, obtained from the “environment” variables at standardized global locations. The object HttpServletResponse carries the result of invoking service. This technique embodies the basic idea of the Command design pattern. Web services allow a similar runtime function discovery and invocation, as will be seen below.

5.2.2 Proxy

Proxy is needed when the logistics of accessing another object’s services sending messages to it is overly complex and requires great expertise. In such cases, the code surrounding the other object’s method invocation becomes comparable or even greater in size than the code of the object’s primary expertise. Instead of making the client object invoker more complex, we can introduce a proxy of the server object subject, see Figure 5-10. Proxy is a surrogate used to stand in for the actual subject object and controlenhance access to it. The causes of access complexity include: • Receiver is located in a remote address space, e.g., on a remote host, in which case the invocation requires following complex networking protocols • Receiver access should be filtered for security purposes or to enforce certain constraints, such as an upper limit on the number of accesses a b ActionType1Cmd + execute + unexecute + isReversible ActionType2Cmd + execute + unexecute + isReversible Receiver1 + doAction1 Receiver2 + doAction2 Invoker Invoker «interface» Command + execute + unexecute + isReversible : boolean receiver receiver Command Knowing Responsibilities: • Knows receiver of action request • Knows whether action is reversible Doing Responsibilities: • Executes an action • Undoes a reversible action Figure 5-8: a Command object employee card. b The Command design pattern class diagram. The base Command class is usually implemented as an interface.