Java中运用的的设计模式 - 行为模式
Java中应用的的设计模式 - 行为模式Behavioral patternsChain of responsibility?(recognizeable by behav
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.ActionInterpreter?(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.Patternjava.text.Normalizer- All subclasses of?
java.text.Format - All subclasses of?
javax.el.ELResolverIterator?(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.EnumerationMediator?(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.StateHolderObserver (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.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerState?(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.AnnotationValueVisitorjavax.lang.model.element.Element?and?javax.lang.model.element.ElementVisitorjavax.lang.model.type.TypeMirror?and?javax.lang.model.type.TypeVisitor