读书人

Java中运用的的设计模式 - 行为模式

发布时间: 2012-08-28 12:37:01 作者: rapoo

Java中应用的的设计模式 - 行为模式

Behavioral patterns

Chain of responsibility?(recognizeable by behavioral methods which (indirectly) invokes the same method inanother?implementation of?same?abstract/interface type in a queue)
  • java.util.logging.Logger#log()
  • javax.servlet.Filter#doFilter()

    Command?(recognizeable by behavioral methods in an abstract/interface type which invokes a method in an implementation of a?different?abstract/interface type which has been?encapsulated?by the command implementation during its creation)
    • All implementations of?java.lang.Runnable
    • All implementations of?javax.swing.Action

      Interpreter?(recognizeable by behavioral methods returning a?structurally?different instance/type of the given instance/type; note that parsing/formatting is not part of the pattern, determining the pattern and how to apply it is)
      • java.util.Pattern
      • java.text.Normalizer
      • All subclasses of?java.text.Format
      • All subclasses of?javax.el.ELResolver

        Iterator?(recognizeable by behavioral methods sequentially returning instances of a?different?type from a queue)
        • All implementations of?java.util.Iterator?(thus under each also?java.util.Scanner!).
        • All implementations of?java.util.Enumeration

          Mediator?(recognizeable by behavioral methods taking an instance of different abstract/interface type (usually using the command pattern) which delegates/uses the given instance)
          • java.util.Timer?(all?scheduleXXX()?methods)
          • java.util.concurrent.Executor#execute()
          • java.util.concurrent.ExecutorService?(the?invokeXXX()?and?submit()?methods)
          • java.util.concurrent.ScheduledExecutorService?(all?scheduleXXX()?methods)
          • java.lang.reflect.Method#invoke()

            Memento?(recognizeable by behavioral methods which internally changes the state of the?whole?instance)
            • java.util.Date?(the setter methods do that,?Date?is internally represented by a?long?value)
            • All implementations of?java.io.Serializable
            • All implementations of?javax.faces.component.StateHolder

              Observer (or Publish/Subscribe)?(recognizeable by behavioral methods which invokes a method on an instance of?another?abstract/interface type, depending on own state)
              • java.util.Observer/java.util.Observable?(rarely used in real world though)
              • All implementations of?java.util.EventListener?(practically all over Swing thus)
              • javax.servlet.http.HttpSessionBindingListener
              • javax.servlet.http.HttpSessionAttributeListener
              • javax.faces.event.PhaseListener

                State?(recognizeable by behavioral methods which changes its behaviour depending on the instance's state which can be controlled externally)
                • All implementations of?java.util.Iterator
                • javax.faces.lifecycle.LifeCycle#execute()?(controlled by?FacesServlet, the behaviour is dependent on current phase (state) of JSF lifecycle)

                  Strategy?(recognizeable by behavioral methods in an abstract/interface type which invokes a method in an implementation of a?different?abstract/interface type which has been?passed-in?as method argument into the strategy implementation)
                  • java.util.Comparator#compare(), executed by under each?Collections#sort().
                  • javax.servlet.http.HttpServlet, the?service()?and all?doXXX()?methods takeHttpServletRequest?and?HttpServletResponse?and the implementor has to process them (and not to get hold of them as instance variables!).
                  • javax.servlet.Filter#doFilter()

                    Template method?(recognizeable by behavioral methods which already have a "default" behaviour definied by an abstract type)
                    • All non-abstract methods of?java.io.InputStream,?java.io.OutputStream,?java.io.Readerand?java.io.Writer.
                    • All non-abstract methods of?java.util.AbstractList,?java.util.AbstractSet?andjava.util.AbstractMap.
                    • javax.servlet.http.HttpServlet, all the?doXXX()?methods by default sends a HTTP 405 "Method Not Allowed" error to the response. You're free to implement none or any of them.

                      Visitor?(recognizeable by two?different?abstract/interface types which has methods definied which takes each theother?abstract/interface type; the one actually calls the method of the other and the other executes the desired strategy on it)
                      • javax.lang.model.element.AnnotationValue?andjavax.lang.model.element.AnnotationValueVisitor
                      • javax.lang.model.element.Element?and?javax.lang.model.element.ElementVisitor
                      • javax.lang.model.type.TypeMirror?and?javax.lang.model.type.TypeVisitor

读书人网 >软件开发

热点推荐