[geos-devel] GeometryFactory - call for explanation

Martin Davis mbdavis at VividSolutions.com
Thu Mar 30 20:49:25 EST 2006


Notice I said "*relatively* static".  You still need the flexibility to use different Precision Models and difference CoordinateSequence implementations when required.  I would think that a static default factory with a FLOATING PM and the default CS would be handy, though.

As for smart pointers, seems like a good idea - although being a Java guy now I have happily purged all of this kind of knowledge from my brain   8^) 

Martin Davis, Senior Technical Architect
Vivid Solutions Inc.      www.vividsolutions.com
Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046


> -----Original Message-----
> From: geos-devel-bounces at geos.refractions.net 
> [mailto:geos-devel-bounces at geos.refractions.net] On Behalf Of 
> Mateusz Loskot
> Sent: March 30, 2006 5:45 PM
> To: GEOS Development List
> Subject: Re: [geos-devel] GeometryFactory - call for explanation
> 
> 
> Martin Davis wrote:
> > Those assumptions are correct. There were two main reason for
> > designing the GeometryFactory concept:
> > 
> > 1) Provide a convenient, single location for defining the various
> > "initial conditions" for Geometries.
> 
> Yes, that's what factory pattern is for.
> 
> > 2) Reduce the memory overhead of Geometries by moving relatively
> > static objects (references) out of the Geometry and into a single 
> > shared object.
> > 
> > Hopefully this makes sense... But if anyone has good opinions about
> > another design pattern, send them along.
> 
> I'd like ask question related to the second point.
> 
> Do you mean that another option would be to create one single 
> (global?) and shared factory?
> 
> If you do, then I'd say this stays in opposition to the 
> assumption nr 3:
> 
> "3. It is not assumed that all geometries share the same 
> common instance of GeometryFactory"
> 
> 
> We, with Sandro, are considering possible improvements 
> related to managing and track lifetime of object like those 
> factories. So, if my 3 assumptions I presented are correct, 
> and they are as you've confirmed already, then here is my proposal:
> 
> I'd suggest to use "Shared Smart Pointer" semantic to manage 
> geometry factories and their relations to geometry objects. 
> One possibility is to use boost::shared_ptr (no linking to 
> ext. libs required, just including one header, as <vector> or <list>).
> 
> Why?
> 
> 1. Using shared_ptr we don't have to track which factory is 
> assigned to which geometry.
> 
> 2. Using shared_ptr we don't have to track where is 
> particular factory used.
> 
> 3. Using shared_ptr it is guaranteed that GeometryFactory 
> object lives as long as it is required and no longer.
> 
> Why not to use singleton or when to use it?
> 
> Singleton is another option but *does* *not* apply to the 
> current design, according to assumptions already confirmed.
> 
> There is rationale to implement GeometryFactory as a 
> Singleton *only* if it is assumed that there is only *one* 
> factory and it is common to all instances of Geometry class. 
> But this situation does not occur as I understand (and 3 
> assumptions confirm).
> 
> strk:
> How are you convinced to move to smart pointers?
> 
> Cheers
> -- 
> Mateusz Łoskot
> http://mateusz.loskot.net 
> _______________________________________________
> geos-devel mailing list
> geos-devel at geos.refractions.net 
> http://geos.refractions.net/mailman/listinfo/geos-devel
> 



More information about the geos-devel mailing list