创建模式之简单工厂模式

简单工厂模式:

实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。


具体实现如下:

1. 定义一个操作接口:

public interface Operation {

public double getResult(double numberA,double numberB) throws Exception;

}

2. 定义具体的操作类:

public class Add implements Operation{

// 加法计算
public double getResult(double numberA, double numberB) {

return numberA + numberB;
}
}


public class Sub implements Operation{

// 减法计算
public double getResult(double numberA, double numberB) {
return numberA-numberB;
}
}


public class Mul implements Operation{

// 乘法计算
public double getResult(double numberA, double numberB) {
return numberA * numberB;
}
}


public class Div implements Operation {

// 除法计算
public double getResult(double numberA, double numberB) throws Exception {
if (numberB == 0) {
throw new Exception("除数不能为0!");
}
return numberA / numberB;
}
}

3. 定义简单工厂类:

public class EasyFactory {

// 简单工厂,根据字符串创建相应的对象
public static Operation createOperation(String name) {
Operation operationObj = null;
switch (name) {
case "+":
operationObj = new Add();
break;
case "-":
operationObj = new Sub();
break;
case "*":
operationObj = new Mul();
break;
case "/":
operationObj = new Div();
break;
}
return operationObj;
}
}

4. 用户端代码:

public class Client {

public static void main(String[] args) throws Exception {

Operation add = EasyFactory.createOperation("+");
Operation sub = EasyFactory.createOperation("-");
Operation mul = EasyFactory.createOperation("*");
Operation div = EasyFactory.createOperation("/");

System.out.println(add.getResult(1, 1));
System.out.println(sub.getResult(1, 1));
System.out.println(mul.getResult(1, 1));
System.out.println(div.getResult(1, 1));
}
}

Result:

2.0
0.0
1.0
1.0

我们无需提供具体的子类类名,只需要提供一个字符串即可得到相应的实例对象。这样的话,当子类的类名更换或者增加子类时我们都无需修改客户端代码,只需要在简单工厂类上增加一个分支判断代码即可。

https://www.bilibili.com/video/BV1xz411b76f/

你可能感兴趣的:(创建模式之简单工厂模式)