Architectural idioms: * ParameterClasses -- parameterise the behaviour of a Java program based on external data * InterfacesIndependentOfImplementation * AppletsAreApplicationsToo -- ensure an applet can run stand-alone, too * PackagePerLayer -- structuring m-tier applications * FallBackOnReflection
Memory management and reference/value semantics: * ResourceReleasesResource, which came from ReleasingResourcesInJava * ReturnNewObjectsFromAccessorMethods -- Avoid aliasing object state by returning copies of state data from accessors * ImmutableValue * ValueObjectsShouldBeImmutable * ReturnImmutablesFromAccessorMethods * CopyMutableParameters * ImmutableCollection -- concurrently walk over and modify a collection * ImmutableInterface * EviscerateParameters * CrossSection * ThrowawayObject * PassParameterInArray * PassParameterInWrapperObject * NoNullBeyondMethodScope * JavaImmutableStruct -- but also see DumbDataObject for a second opinion. --JeffBay
Object creation and initialisation idioms * TestWhetherInConstructionPhase * EncapsulateMultiStageConstruction * UseFactoriesToBuildObjects * HelperMethodForInitializations * ParameterFileNotHtmlParams * ParameterClasses * ComplexInterfacesNeedCloneable -- implement clone() when dealing with non-trivial interfaces * AlwaysDeclareSerialVersionUid * ImmutableValue * ArgumentAccumulator
Enumeration and collection idioms: * ReturnEnumerationsNotCollections * UseEnumerationsNotForLoops * UseClosuresNotEnumerations * ImmutableCollection * DuplicateCollectionsForModificationSafety * BlocksInJava * FlyweightEnum * EnumeratedTypesInJava * TheLclass
How to use interfaces: * BuildInterfaceImplementationPairs * MaskingInterfaces * InterfacesIndependentOfImplementation * ComplexInterfacesNeedCloneable -- implement clone() when dealing with non-trivial interfaces * InterfacesForDefiningConstants * UseClosuresNotEnumerations * ImmutableInterface -- emulate the C++ const keyword in Java * TagInterface -- empty interface to tag a class * AdaptDontImplement -- use of the Adaptor pattern instead of implementing interfaces * FallBackOnReflection
Exception idioms: * DontThrowGenericExceptions * ConvertExceptions ** HomogenizeExceptions *** RefineExceptions * RefactorExceptionHandlers * ThrowDontCatch * UnhandledException * BouncerPattern * ExceptionTunneling * NestedException * GeneralizeOnExceptionBehavior * DeclareThrowsExceptionByDefault * EmptyCatchClause (an AntiIdiom) * perhaps UseFinallyInsteadOfCatch? will come from JavaExceptionsAreParticularlyEvil
Concurrency idioms * ImmutableCollection * ImmutableValue * ImmutableInterface * ValueObjectsShouldBeImmutable * PrivateMutex
Type-safety idioms * EnumeratedTypesInJava * AvoidFinalStringsForUniqueTypes * MaskingInterfaces * BuildInterfaceImplementationPairs * RangedInt -- Range-limited integer in Java
Performance * CatchDontCheck (Rather an Antipattern as described on CatchDontCheckRefuted) * CheckDontCatch * BetterForLoopConstruct * FallBackOnReflection
Documentation and commenting * FixmeComment -- on the usage of comments for marking code that needs attention
InnerClasses * InnerClassesAreSecondaryAbstractions * NoPublicInnerClasses * InnerClassInInterface -- or NestedClassInInterface
Networking, Remote Objects & Remote Method Invokation * ObserversAndRmi * RmiPatterns
General workarounds, idioms, references and miscellanea: * BeansNotObserverObservable * ConditionalCompilationInJava * EfficientContractsInJava * ReturnBooleanEvaluations * UseObjectsToReturnMultipleValues * ClosuresThatWorkAroundFinalLimitation * LimitConstructorArguments * AbstractStaticVariables * CreatePrivatelyPublishLater * BankOfEngland * JavaPackageNames -- how to name a package * BlocksInJava -- HigherOrderFunctions and FunctorObjects? in Java * ObserverObservable (a pattern implementation, not an idiom) * IdiomOrPattern -- what's an idiom * JavaPatterns * ServletAndJspPatterns
AntiPatterns & AntiIdioms:
* EmptyCatchClause * DoubleCheckedLockingIsBroken * DontCreateGarbage
Related Work:
* "Java in Practice: Design Styles and Idioms for Effective Java", ISBN 0201360659 * "EssentialJavaStyle: Patterns for Implementation", ISBN 0130850861 * "EffectiveJava: Programming Language Guide", ISBN 0201310058
* "Patterns in Java, Volume 1", ISBN 0471258393 . http://www.mindspring.com/~mgrand/pattern_synopses.htm * "Patterns in Java, Volume 2", ISBN 0471258415 . http://www.mindspring.com/~mgrand/pattern_synopses2.htm * "Patterns in Java, Volume 3", ISBN 0471333158 . http://www.mindspring.com/~mgrand/pattern_synopses3.htm
This page mirrored in JavaIdioms as of October 22, 2005