在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java设计模式编程中简单工厂与抽象工厂模式的使用实例

2016-7-29 15:37| 发布者: zhangjf| 查看: 656| 评论: 0

摘要: 简单工厂模式 类图 通过一个工厂类,以一个条件来创建对应的对象 //业务功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation ...

简单工厂模式
类图

201642195447625.jpg (966×712)

通过一个工厂类,以一个条件来创建对应的对象

  1. //业务功能
  2. public interface ICalculation {
  3. double getResult(double numA, double numB);
  4. }
  5. public class CalcAdd implements ICalculation {
  6. @Override
  7. public double getResult(double numA, double numB) {
  8. System.out.println("加法");
  9. return numA + numB;
  10. }
  11. }
  12. public class CalcSubtract implements ICalculation {
  13. @Override
  14. public double getResult(double numA, double numB) {
  15. System.out.println("减法");
  16. return numA - numB;
  17. }
  18. }
  19. /*
  20. * 简单工厂模式 关注:对象的创建
  21. * 建立一个工厂类,对实现了同一接口的或者是存在继承关系的一些类进行实例的创建
  22. */
  23. public class Test4Simple {
  24. public static void main(String[] args) {
  25. // String operation = "/";
  26. String operation = "+";
  27. // String operation = "-";
  28. // String operation = "*";
  29. double numA = 182, numB = 33;
  30. ICalculation createCalc = CalcSimpleFactory.createCalc(operation);
  31. double result = createCalc.getResult(numA, numB);
  32. System.out.println(result);
  33. }
  34. }
复制代码

简单工厂的缺陷: 简单工厂创建产品时需要传递相应的参数,如果传递不正确就取不到对象了。
改进:多方法创建不同产品
类图

201642195519770.jpg (926×736)

  1. public class CalcMultipleFactory {
  2. public static ICalculation produceAdd() {
  3. return new CalcAdd();
  4. }
  5. public static ICalculation produceSubtract() {
  6. return new CalcSubtract();
  7. }
  8. public static ICalculation produceMultiply() {
  9. return new CalcMultiply();
  10. }
  11. public static ICalculation produceDivide() {
  12. return new CalcDivide();
  13. }
  14. }
  15. public class Test4Multiple {
  16. public static void main(String[] args) {
  17. double numA = 182, numB = 33;
  18. ICalculation createCalc = CalcMultipleFactory.produceAdd();
  19. double result = createCalc.getResult(numA, numB);
  20. System.out.println(result);
  21. createCalc = CalcMultipleFactory.produceSubtract();
  22. result = createCalc.getResult(numA, numB);
  23. System.out.println(result);
  24. createCalc = CalcMultipleFactory.produceMultiply();
  25. result = createCalc.getResult(numA, numB);
  26. System.out.println(result);
  27. createCalc = CalcMultipleFactory.produceDivide();
  28. result = createCalc.getResult(numA, numB);
  29. System.out.println(result);
  30. }
  31. }
复制代码

抽象工厂模式
里面有几个概念:抽象工厂、实体工厂、抽象产品、实体产品
抽象工厂:定义创建产品的抽象方法
实体工厂:具体的创建哪种产品
抽象产品:一个接口或基类
实体产品:实现具体功能,或派生
类图

201642195549773.jpg (1396×882)

  1. //抽象产品1
  2. public interface IProduct1 {
  3. public void show();
  4. }
  5. //抽象产品2
  6. public interface IProduct2 {
  7. public void show();
  8. }
  9. //实体产品1
  10. public class Product1 implements IProduct1 {
  11. public void show() {
  12. System.out.println("创建了1型产品");
  13. }
  14. }
  15. //实体产品2
  16. public class Product2 implements IProduct2 {
  17. public void show() {
  18. System.out.println("创建了2型产品");
  19. }
  20. }
  21. /*
  22. * 1A 1B属于Product1 同一产品等级结构中
  23. * 2A 2B属于Product2
  24. */
  25. public class GradeProduct1A extends Product1 {
  26. @Override
  27. public void show() {
  28. super.show();
  29. System.out.println("这是产品1下的:产品A");
  30. }
  31. }
  32. public class GradeProduct1B extends Product1 {
  33. @Override
  34. public void show() {
  35. super.show();
  36. System.out.println("这是产品1下的:产品B");
  37. }
  38. }
  39. public class GradeProduct2A extends Product2 {
  40. @Override
  41. public void show() {
  42. super.show();
  43. System.out.println("这是产品2下的:产品A");
  44. }
  45. }
  46. public class GradeProduct2B extends Product2 {
  47. @Override
  48. public void show() {
  49. super.show();
  50. System.out.println("这是产品2下的:产品B");
  51. }
  52. }
  53. //抽象工厂 创建不同的抽象产品
  54. public interface IFactory {
  55. public IProduct1 createProduct1A();//1类产品 型号A
  56. public IProduct1 createProduct1B();//1类产品 型号B
  57. public IProduct2 createProduct2A();//2类产品 型号A
  58. public IProduct2 createProduct2B();//2类产品 型号B
  59. }
  60. //实体工厂 创建实体产品,返回类型为抽象产品
  61. public class Factory implements IFactory {
  62. public IProduct1 createProduct1A() {
  63. return new GradeProduct1A();
  64. }
  65. public IProduct1 createProduct1B() {
  66. return new GradeProduct1B();
  67. }
  68. public IProduct2 createProduct2A() {
  69. return new GradeProduct2A();
  70. }
  71. public IProduct2 createProduct2B() {
  72. return new GradeProduct2B();
  73. }
  74. }
  75. /*
  76. * 抽象工厂模式:用来创建一组相关或者相互依赖的对象
  77. *
  78. * 流程:抽象工厂,实体工厂 生产产品
  79. * 抽象产品,实体产品 实现产品功能
  80. * 缺点:当需要增加一个产品(由抽象和实体构成),工厂都需要更改
  81. */
  82. public class Test4Abstract {
  83. public static void main(String[] args) {
  84. IFactory factory = new Factory();
  85. IProduct1 product1a = factory.createProduct1A();
  86. product1a.show();
  87. IProduct1 product1b = factory.createProduct1B();
  88. product1b.show();
  89. IProduct2 product2a = factory.createProduct2A();
  90. product2a.show();
  91. IProduct2 product2b = factory.createProduct2B();
  92. product2b.show();
  93. }
  94. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 09:19

Copyright 2015-2025 djqfx

返回顶部