工厂模式有三种:简单工厂模式,工厂方法模式和抽象工厂模式

工厂模式

  • 将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目依赖关系的解耦,从而提高项目的扩展和维护性。
  • 创建对象实例时,不去直接new,而是把这个new类的动作放到一个工厂方法中。
  • 不让类继承具体类,而是继承抽象类或者是实现接口。
  • 不要覆盖基类中已经实现的方法。

简单工厂模式

简单工厂模式属于创建型模式,是工厂模式的一种。是工厂模式家族中最简单实用的模式。
简单工厂模式:定义一个创建对象的类,由这个类来封装实例化对象的行为。

写一个计算器的例子:

  1. //定义一个操作基类
  2. public abstract class Operation {
  3. private double number_a;
  4. private double number_b;
  5. public abstract double getResult();
  6. // 省略getter setter方法...
  7. }
  8. //加法运算类
  9. public class OperationAdd extends Operation{
  10. @Override
  11. public double getResult() {
  12. return getNumber_a()+getNumber_b();
  13. }
  14. }
  15. //减法运算类
  16. public class OperationSub extends Operation{
  17. @Override
  18. public double getResult() {
  19. return getNumber_a()-getNumber_b();
  20. }
  21. }
  22. //静态工厂类
  23. public class Operationfactory {
  24. public static Operation createOperate(String operate){
  25. Operation oper = null;
  26. if(operate == "+"){
  27. oper = new OperationAdd();
  28. }else if(operate == "-"){
  29. oper = new OperationSub();
  30. }
  31. return oper;
  32. }
  33. }
  34. //计算测试
  35. public class SimpleFactory {
  36. public static void main(String[] args) {
  37. Operation oper;
  38. oper = Operationfactory.createOperate("+");
  39. oper.setNumber_a(5.5);
  40. oper.setNumber_b(3.4);
  41. double result = oper.getResult();
  42. System.out.println(result); //8.9
  43. }
  44. }

工厂方法模式

工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

将上面的代码进行改进,就是不要那个Operationfactory静态工厂类了。

  1. //定义一个操作基类
  2. public abstract class Operation {
  3. private double number_a;
  4. private double number_b;
  5. public abstract double getResult();
  6. // 省略getter setter方法...
  7. }
  8. //加法运算类
  9. public class OperationAdd extends Operation{
  10. @Override
  11. public double getResult() {
  12. return getNumber_a()+getNumber_b();
  13. }
  14. }
  15. //定义一个创建操作符的接口
  16. public interface FactoryFunction {
  17. Operation createOperation();
  18. }
  19. //加法操作符工厂实现这个接口 在这个工厂里返回对象
  20. public class AddFactory implements FactoryFunction{
  21. @Override
  22. public Operation createOperation() {
  23. return new OperationAdd();
  24. }
  25. }
  26. public static void main(String[] args) {
  27. //获取操作符的时候用加法工厂获取对象
  28. FactoryFunction factory = new AddFactory();
  29. Operation oper = factory.createOperation();
  30. oper.setNumber_a(5.5);
  31. oper.setNumber_b(3.4);
  32. double result = oper.getResult();
  33. System.out.println(result); //8.9
  34. }


抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。

从设计层面看,抽象工厂模式就是对简单工厂模式的改进,或者说是进一步的抽象。将工厂抽象成两层,分为抽象工厂和具体实现的子类工厂。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

image.png