简单工厂

image.png
代码:

  1. public class FactoryTest {
  2. public static void main(String[] args) {
  3. Operation operate = OperationFactory.createOperate("+");
  4. operate.NumberA = 3;
  5. operate.NumberB = 4;
  6. System.out.println(operate.GetReuslt());
  7. }
  8. }
  9. public abstract class Operation {
  10. int NumberA;
  11. int NumberB;
  12. public abstract int GetReuslt();
  13. }
  14. public class OperationAdd extends Operation {
  15. @Override
  16. public int GetReuslt() {
  17. return NumberA + NumberB;
  18. }
  19. }
  20. public class OperationDiv extends Operation{
  21. @Override
  22. public int GetReuslt() {
  23. return NumberA - NumberB;
  24. }
  25. }
  26. public class OperationFactory {
  27. public static Operation createOperate(String operation){
  28. Operation factory = null;
  29. switch (operation){
  30. case "+" :
  31. factory = new OperationAdd();
  32. break;
  33. case "-":
  34. factory = new OperationDiv();
  35. break;
  36. }
  37. return factory;
  38. }
  39. }

工厂模式

工厂模式与简单工厂的区别:

简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态 实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
简单工厂违反了开闭原则

工厂模式的缺点:新增一个种类,都需要新增一个工厂和一个产品,使用反射可以优化

工厂模式结构图

image.png

  1. public class FactoryTest {
  2. public static void main(String[] args) {
  3. IFactory operFactory = new AddFactory();
  4. Operation operation = operFactory.createOperation();
  5. operation.NumberA = 3;
  6. operation.NumberB = 4;
  7. System.out.println(operation.GetReuslt());
  8. }
  9. }
  10. //工厂抽象类
  11. public interface IFactory {
  12. Operation createOperation();
  13. }
  14. //加法工厂
  15. public class AddFactory implements IFactory{
  16. @Override
  17. public Operation createOperation() {
  18. return new OperationAdd();
  19. }
  20. }
  21. //减法工厂
  22. public class DivFactory implements IFactory {
  23. @Override
  24. public Operation createOperation() {
  25. return new OperationDiv();
  26. }
  27. }
  28. //运算抽象类
  29. public abstract class Operation {
  30. public int NumberA;
  31. public int NumberB;
  32. public abstract int GetReuslt();
  33. }
  34. //加法运算类
  35. public class OperationAdd extends Operation {
  36. @Override
  37. public int GetReuslt() {
  38. return NumberA + NumberB;
  39. }
  40. }
  41. //减法运算类
  42. public class OperationDiv extends Operation{
  43. @Override
  44. public int GetReuslt() {
  45. return NumberA - NumberB;
  46. }
  47. }

抽象工厂:
概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
我之前不理解的点:抽象工厂相对于工厂模式而言,工厂模式对多个产品进行操作的时候,代码非常冗余,抽象工厂解决的就是产品族。相较于之前的工厂模式,抽象工厂只是多了一个AbstactFactory接口,让不同的工厂实现他。

抽象工厂缺点:新增抽象工厂功能时,要改动接口,以及所有实现类,改动非常大
不如直接使用简单工厂,使用简单工厂的缺点是新增一种工厂代码量又会增多。
image.png