Facility

In the current design, there are 17 unique facilities, which can be grouped into 4 classes, which I have named: Storage Facilities
In simple terms, these increase the quantity of some "material" that can be "stored" in a base. The "storage" facilities are: Notes on storage type Scan Facilities
These detect UFOs. The "scan" facilities are: Notes on scan type Defence Facilities
These facilities shoot at UFOs when UFOs try to attack a base. The defence facilities are: Notes on defence type Special Facilities
These are facilities that don't belong to a class. That is, each one is unique, with no other facility like it. The special facilities are: Notes on these types Common Facility Behaviour
I'd propose the following set of classes for hooking facilities to bases.
(UML diagram attached, note that it doesn't show member functions nor all attributes for classes.)

The basic idea is that the FacilityInfo classes are flyweights, holding the "class properties" (build cost, size, etc.) and functionality, but not the instance data. Actual instances of facilities are represented by the FacilityHandle class. Which holds build state.
The Base class owns a FloorPlan and a Capacities.
The FloorPlan is responsible for managing the FacilityHandles. Really, it just keeps track of the position of the facilities in the base (probably in an array) and their build state. (As you can guess, I haven't quite figured out the exact division of responsibility between FacilityHandle and FloorPlan classes.) For performance reasons, the FloorPlan will probably also hold a list of "updateable" facilities. That is, facilities that need to get called on an update(game time). Currently it's only the scan facilities, but it might be others later.
The Capacities is responsible for tracking the "storage capacities" granted by the facilities. As discussed above in Storage Facilities.