开始对工厂设计不太理解。感觉有构造方法为什么不调用呢?即使使用工厂模式也只是将本来类中构造方法的问题推给了工厂接口而已。增删改的添加也一样的修改。
我理解比较信服的理由是:使用工厂模式,拆分了客户使用和类的耦合。使用工厂接口降低了客户的学习要求,在接口中可以很好的规避由于客户输入的信息造成的bug。格式化信息以及输入异常不应该由类来处理,应该交由工厂接口处理。
以下例子:
abstract class Factory{
static Add a = null;
public static Add getInstance(String x,String y) {
if(x.contains(".")) { //x包含小数点
if(y.contains(".")) { //y包含小数点
a = new Add(Float.parseFloat(x),Float.parseFloat(y));
}else { //y不包含小数点
a = new Add(Float.parseFloat(x),Integer.parseInt(y));
}
}else { //x不包含小数点
if(y.contains(".")) { //y包含小数点
a = new Add(Integer.parseInt(x),Float.parseFloat(y));
}else { //y不包含小数点
a = new Add(Integer.parseInt(x),Integer.parseInt(y));
}
}
return a;
};
}
class Add extends Factory{
Add(int x,int y) {
System.out.println(x+ "+" + y + "=" + (x+y));
}
Add(int x,float y) {
System.out.println((float)x+ "+" + y + "=" + ((float)x+y));
}
Add(float x,int y) {
System.out.println(x+ "+" + (float)y + "=" + (x+(float)y));
}
Add(float x,float y) {
System.out.println((float)x+ "+" + (float)y + "=" + ((float)x+(float)y));
}
}
public class TestDemo {
public static void main(String args[]) {
Add x1 = Factory.getInstance("2", "5");
Add x2 = Factory.getInstance("2.2", "5");
Add x3 = Factory.getInstance("2", "5.5");
Add x4 = Factory.getInstance("2.2", "5.5");
}
}
结果:
2+5=7
2.2+5.0=7.2
2.0+5.5=7.5
2.2+5.5=7.7
怎么看着有点像单态设计?!