package com.yukiyama.pattern.creation;
/**
* 简单工厂模式(静态工厂模式)
*/
public class StaticFactoryDemo {
public static void main(String[] args) {
// 通过静态工厂类静态方法返回一个具体产品。
Operation oper = OperationFactory.operate("*");
// 执行该产品的方法。输出“12”
System.out.println(oper.result(3, 4));
}
}
/**
* 静态工厂类
* 通过一个类静态方法,根据输入返回相应的工厂类。内部通常为if-else或
* switch-case。
*/
class OperationFactory{
public static Operation operate(String sign) {
Operation oper = null;
switch (sign) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
default:
System.out.println("不支持此运算。");
}
return oper;
}
}
/**
* 抽象产品类
* 定义产品的抽象方法。
* 下例以四则运算为产品,内有对两个int数的运算方法。
*/
abstract class Operation{
public abstract int result(int a, int b);
}
/**
* 具体产品类
* 继承抽象产品类,实现抽象方法。
* 下例为加法产品。
*/
class OperationAdd extends Operation{
@Override
public int result(int a, int b) {
return a + b;
}
}
/**
* 具体产品类,减法
*/
class OperationSub extends Operation{
@Override
public int result(int a, int b) {
return a - b;
}
}
/**
* 具体产品类,乘法
*/
class OperationMul extends Operation{
@Override
public int result(int a, int b) {
return a * b;
}
}
/**
* 具体产品类,除法
*/
class OperationDiv extends Operation{
@Override
public int result(int a, int b) {
if(b == 0) {
System.err.println("除数不能为0.");
throw new IllegalArgumentException();
}
return a / b;
}
}