前几天面试,面试官让我现场用工厂模式写一个简单的计算器,实现加减乘除功能。
下面记录一下个人的思路,用简单工厂模式实现。
1、首先我考虑计算器的功能是获取计算结果,那么首先定义接口(也可以用抽象类实现)
public interface CalcResult {
float getResult(float a, float b);
}
获取结果需要传入两个数
下面定义这个接口的加减乘除四个实现类(乘除英文忘了,索性都用中文吧)
public class CalcJia implements CalcResult {
@Override
public float getResult(float a, float b) {
return a + b;
}
}
public class CalcJian implements CalcResult {
@Override
public float getResult(float a, float b) {
return a - b;
}
}
public class CalcChen implements CalcResult {
@Override
public float getResult(float a, float b) {
return a * b;
}
}
public class CalcChu implements CalcResult {
@Override
public float getResult(float a, float b) {
return a / b;
}
}
接下来定义工厂
public class CalcFactory {
public final static int TYPE_JIA = 0x1;
public final static int TYPE_JIAN = 0x2;
public final static int TYPE_CHEN = 0x3;
public final static int TYPE_CHU = 0x4;
public static CalcResult create(int Type) {
switch (Type) {
case TYPE_JIA:
return new CalcJia();
case TYPE_JIAN:
return new CalcJian();
case TYPE_CHEN:
return new CalcChen();
case TYPE_CHU:
return new CalcChu();
default:
return null;
}
}
}
下面使用这个计算器
public class CalcTest {
public static void main(String[] args) {
System.out.println(CalcFactory.create(CalcFactory.TYPE_JIA).getResult(1, 2));
}
}
这样用简单工厂模式实现一个计算器就完成了,如果后面要扩充需要增加接口的实现类以及工厂中的判断
下面继续记录一下另外两种工厂模式
1、工厂方法模式
将工厂接口提取出来
public interface ICalcFactory {
CalcResult create();
}
实现该接口
public class JiaFactory implements ICalcFactory{
@Override
public CalcResult create() {
return new CalcJia();
}
}
public class CalcTest {
public static void main(String[] args) {
// System.out.println(CalcFactory.create(CalcFactory.TYPE_JIA).getResult(1, 2));
System.out.println(new JiaFactory().create().getResult(1,2));
}
}
2、抽象工厂模式
这个例子想不到怎么加,下次换个例子在记录