Changes

Jump to: navigation, search

Template Method

1,914 bytes added, 19:56, 19 March 2007
Apache Tomcat
Source from Zend Technologies, http://www.zend.com/zend/php5/php5-OOP.php?article=php5-OOP&kind=ph&id=3204&open=1&anc=0&view=1
== Real-life Application Applications ==
=== Apache Excalibur=== The following examples shows that class CascadingErrorTestCase is extending from an abstract class called TestCase, possibly in the junit.framework.TestCase package.
The following are portions of the code found in [http://www.google.com/codesearch?hl=en&q=show:b65X65FJv3k:tIVs6rnDDGE:CuwdO4_VJq8&sa=N&ct=rd&cs_p=https://svn.apache.org/repos/asf/excalibur/trunk&cs_f=framework/api/src/test/org/apache/avalon/framework/test/CascadingErrorTestCase.java[CascadingErrorTestCase.java]] and [http://www.google.com/codesearch?hl=en&q=show:5CjVErg7uPw:tIVs6rnDDGE:W66LfbDC3n0&sa=N&ct=rd&cs_p=https://svn.apache.org/repos/asf/excalibur/trunk&cs_f=framework/api/src/test/org/apache/avalon/framework/test/CascadingExceptionTestCase.java[CascadingEexceptionTestCase.java]] files.<br/><br/>
When comparing these two files, we can see that the two files share a common package '''org.apache.avalon.framework.test'''.
<pre>
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.avalon.framework.test;
import junit.framework.TestCase;
</**pre>  * From the following, we can see that the class '''CascadingErrorTestCase''' is extending from an abstract class called '''TestCase'''. This is the same case in the '''CascadingExceptionTestCase.java''' file. Hence, this shows that these two classes are subclasses of the class '''TestCase for {@link CascadingError}'''. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</apre> * @version $Id$ */
public class CascadingErrorTestCase extends TestCase
{
}
</pre>
 
When looking at the testConstructor() in both files, we can see that it implements different methods, therefore its altering the algorithm operation of the file. Therefore we can conclude that the general steps in the constructor is not altered, but the implementation is different.
<pre>
// From CascadingErrorTestCase.java
public void testConstructor()
{
//assertNotNull( new CascadingError() );
}
</pre><pre> // From CascadingExceptionTestCase.java public void testGetCausetestConstructor()
{
RuntimeException re = assertNotNull( new CascadingException( null, null ) ); assertNotNull( new RuntimeExceptionCascadingException("msg", null ) ); CascadingError e = assertNotNull( new CascadingErrorCascadingException( "msg", re new RuntimeException() ) ); assertNotNull( new CascadingException( null, new RuntimeException() ) );
assertEqualsassertNotNull( re, e.getCausenew CascadingException("msg" ) ); // ambiguous assertNotNull( new CascadingException( null ) ); //assertNotNull( new CascadingException() ); }</pre>
e Source from [http://www.google.com/codesearch?hl=en&q=show:tIVs6rnDDGE:QLDR0Cw82Lo&sa=N&ct=rdl&cs_p= new CascadingError( "msg", null ); assertNull( ehttps://svn.apache.getCause() );org/repos/asf/excalibur/trunk&cs_f=framework/api/src/test/org/apache/avalon/framework/test/ | Apache Excalibur Test Framework via Google Code Search]
// default to jdk 1.3 cause (not that it seems to help, // but it still makes sense) /*Exception exc = new Exception("blah"); try { try { throw exc; } catch( Exception ex ) { throw new CascadingError(); } } catch( CascadingError ex ) { ex.getCause(); }*/ }== Apache Tomcat ===
The following are portions of the code found in [https://svn.apache.org/repos/asf/tomcat/connectors/trunk/jk/java/org/apache/jk/common/Shm.java[Shm.java]] and[https://svn.apache.org/repos/asf/tomcat/connectors/trunk/jk/java/org/apache/jk/common/Shm14.java[Shm14.java]]<br/><br/>Looking at the '''Shm14.java''', we can conclude that '''Shm.java''' is the base class while ''''Shm14.java'''' is the subclass. In addition, ''''Shm.java''' also extends to '''JniHandler''', making it a subclass of that class.<pre>// From Shm14.javapublic class Shm14 extends Shm {}</pre><pre>// From Shm.javapublic class Shm extends JniHandler {}</pre>From the file '''Shm.java''', the following method is given. <pre> public void testCasts int invoke(Msg msg, MsgContext ep ) throws IOException
{
CascadingError e if( apr= new CascadingError=null ) return 0; log.debug( "msgChannelShm.invoke: ", null + ep ); assertTruesuper.nativeDispatch( e instanceof Error msg, ep, JK_HANDLE_SHM_DISPATCH, 0 ); assertTruereturn 0; } </pre>In the ''''Shm14.java'''' file, the method from the base class is overridden with the following new one - its implementation changed, but the same structure.<pre> public int invoke( e instanceof CascadingThrowable Msg msg, MsgContext ep ); throws IOException }{ if (log.isDebugEnabled()) log.debug("ChannelShm14.invoke: " + ep );
// return 0; }
</pre>
Source from [https://svn.apache.org/repos/asf/tomcat/connectors/trunk/jk/java/org/apache/jk/common/ | Apache Tomcat Sample Code via Google Code Search]
== References ==
Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2.<br/>
[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method on Wikipedia]<br/><br/><br/>
[[BTP600|BTP600 Wiki Page]]<br/>
[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method on Wikipedia]<br/>
1
edit

Navigation menu