Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #7098
| From | Lew <lewbloch@gmail.com> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Synchronization of the constructor |
| Date | 2011-08-13 21:29 -0700 |
| Organization | http://groups.google.com |
| Message-ID | <e695c538-923e-41c7-9345-659ca2e4e9ab@glegroupsg2000goo.googlegroups.com> (permalink) |
| References | <j25hro$cjf$1@news.onet.pl> <j25uri$vm$1@dont-email.me> <j264b6$3u5$1@dont-email.me> <fb83dde2-63a4-4990-b8f9-af413301c31d@glegroupsg2000goo.googlegroups.com> <SuadncmuyIkvM9vTnZ2dnUVZ_rydnZ2d@earthlink.com> |
Patricia Shanahan wrote: > I have been shifting away from public constructors towards private or > protected constructors with a public static factory method. > > In this approach, it is easy to make the constructor do absolutely > nothing but construction. The factory method can do additional steps, > such as starting a thread or calling synchronized methods, to bring the > object into full operation before returning it. > > In addition to making it easier to write thread-safe code, the factory > method approach is generally more flexible than calling constructors > directly from other classes. In addition to the benefits Patricia mentioned, factory methods can infer generic parameters in a lot of situations where you'd have to state them explicitly with constructors. They can also call builders for you, if you have that need. I do recommend that one not make a religion out of factory methods. Badly designed factory methods are especially evil. (I remember one project where the "factory" method required explicit knowledge of the class under construction, had naming conventions connecting the method to both the class under construction and the associated unit test that had to be followed or the code broke, abandoned compiler-enforceable type relationships, and required a cast to the target type anyway, all to accomplish a simple no-argument constructor call of the target type.) Then again, badly-designed code is always evil, isn't it? Point being that there are particular use cases when it's OK to use a constructor if the advantages of a factory method are not particularly compelling, or if the hoops to implement and use a factory method are too epicyclic. But Patricia's advice and insights are very sound (as they always are from her); factory methods bring great advantages for a lot of scenarios. I certainly plan to increase my appreciation for them because of her post. -- Lew
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
Synchronization of the constructor MaciekL <__nospam__maclab@o2.pl> - 2011-08-13 11:58 +0200
Re: Synchronization of the constructor Robert Klemme <shortcutter@googlemail.com> - 2011-08-13 12:17 +0200
Re: Synchronization of the constructor "Qu0ll" <Qu0llSixFour@gmail.com> - 2011-08-13 21:36 +1000
Re: Synchronization of the constructor Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2011-08-13 09:30 -0300
[OT] Natural language. Was: Re: Synchronization of the constructor Patricia Shanahan <pats@acm.org> - 2011-08-13 07:10 -0700
Re: Synchronization of the constructor Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-08-13 09:36 -0400
Re: Synchronization of the constructor markspace <-@.> - 2011-08-13 08:13 -0700
Re: Synchronization of the constructor Lew <lewbloch@gmail.com> - 2011-08-13 09:23 -0700
Re: Synchronization of the constructor Patricia Shanahan <pats@acm.org> - 2011-08-13 10:04 -0700
Re: Synchronization of the constructor Lew <lewbloch@gmail.com> - 2011-08-13 21:29 -0700
Re: Synchronization of the constructor kedar mhaswade <kedar.mhaswade@gmail.com> - 2011-08-13 23:16 -0700
Re: Synchronization of the constructor "Qu0ll" <Qu0llSixFour@gmail.com> - 2011-08-15 14:24 +1000
Re: Synchronization of the constructor Lew <lewbloch@gmail.com> - 2011-08-14 23:03 -0700
Re: Synchronization of the constructor kedar mhaswade <kedar.mhaswade@gmail.com> - 2011-08-13 23:12 -0700
Re: Synchronization of the constructor markspace <-@.> - 2011-08-14 07:42 -0700
Re: Synchronization of the constructor markspace <-@.> - 2011-08-14 07:51 -0700
Re: Synchronization of the constructor Lew <lewbloch@gmail.com> - 2011-08-14 09:10 -0700
Re: Synchronization of the constructor markspace <-@.> - 2011-08-14 11:28 -0700
csiph-web