设计模式--工厂模式
还是以计算器为例
首先定义Operation接口和Add,Sub,Mul,Div操作
public interface Operation { public double getResult(double a, double b); } public class Add implements Operation { @Override public double getResult(double a, double b) { return a + b; } } public class Sub implements Operation { @Override public double getResult(double a, double b) { return a - b; } } public class Mul implements Operation { @Override public double getResult(double a, double b) { return a * b; } } public class Div implements Operation { @Override public double getResult(double a, double b) { if (b == 0) { throw new IllegalArgumentException("除数不能为0!"); } return a / b; } }
接下来创建抽象工厂
public abstract class AbstractOperationFactory { public abstract Operation createOperation(String op); }
创建工厂实现类
public class OperationFactory extends AbstractOperationFactory { @Override public Operation createOperation(String op) { Operation operation = null; switch (op) { case "+": operation = new Add(); break; case "-": operation = new Sub(); break; case "*": operation = new Mul(); break; case "/": operation = new Div(); break; default: break; } return operation; } public static void main(String args[]) { AbstractOperationFactory operationFactory = new OperationFactory(); System.out.println(operationFactory.createOperation("+").getResult(1, 2)); System.out.println(operationFactory.createOperation("-").getResult(1, 2)); System.out.println(operationFactory.createOperation("*").getResult(1, 2)); System.out.println(operationFactory.createOperation("/").getResult(1, 2)); // 除数为0 System.out.println(operationFactory.createOperation("/").getResult(1, 0)); } }
枚举工厂
public enum OperationEnmuFactory { ADD, MUL, DIV, SUB; public Operation createOperation() { Operation operation = null; switch (this) { case ADD: operation = new Add(); break; case MUL: operation = new Mul(); break; case DIV: operation = new Div(); break; case SUB: operation = new Sub(); break; default: break; } return operation; } public static void main(String args[]) { Operation add = OperationEnmuFactory.ADD.createOperation(); System.out.println(add.getResult(1, 2)); Operation mul = OperationEnmuFactory.MUL.createOperation(); System.out.println(mul.getResult(1, 2)); Operation sub = OperationEnmuFactory.SUB.createOperation(); System.out.println(sub.getResult(1, 2)); Operation div = OperationEnmuFactory.DIV.createOperation(); System.out.println(div.getResult(1, 2)); // 除数为0测试 System.out.println(div.getResult(1, 0)); } }