Both shaders have this in common: They are used to combine or put shaders properties together. The difference I would give is that the mix shaders takes the property of one shader e.g diffuse and mixes it with the property of another, say glossy shader.
However, in this case, the mix will be dependent on the factor value. The factor has a proximity of zero to one. By default, the factor value will be 0.5. Setting it to 0 would mean that you get the property of one of the shaders without the other. This will again depend on how you have connected the nodes; either the upper or the lower.
Setting the factor to 1 will get you the absolute property of the other shader. This is very different in the add shader. Taking the example above, and replacing the mix shader with the add shader, we get different results. As its name goes, this adds the property of the two materials.
To mention, this add shader should be used in specific materials since not all materials will add up desirably. Additionally, add shader doesn't have a factor since it cannot. Remember we are adding two properties together and the rule of math is. 1+1=2. Adding a diffuse to another diffuse will make it brighter, sometimes very unpleasant. Adding a diffuse on top of a glossy shader will give you a diffuse material a bit brighter than the original one but no glossy at all. In math you cannot add
Y and arrive at an absolute answer. But you can add
-X to give you zero.