经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Matlab建造者模式 - sw-lab
来源:cnblogs  作者:sw-lab  时间:2019/5/28 9:31:41  对本文有异议

构建者模式又叫建造者模式(Builder),是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。本文以创建计算机为例,使用Matlab语言来实现。
Computer.m (要构造的复杂对象)

  1. classdef Computer < handle
  2. properties
  3. name = "";
  4. CPU = "";
  5. memory = "";
  6. disk = "";
  7. end
  8. methods
  9. function set.name(obj,name)
  10. obj.name = name;
  11. end
  12. function name = get.name(obj)
  13. name = obj.name;
  14. end
  15. function set.CPU(obj,CPU)
  16. obj.CPU = CPU;
  17. end
  18. function CPU = get.CPU(obj)
  19. CPU = obj.CPU;
  20. end
  21. function set.memory(obj,memory)
  22. obj.memory = memory;
  23. end
  24. function memory = get.memory(obj)
  25. memory = obj.memory;
  26. end
  27. function set.disk(obj,disk)
  28. obj.disk = disk;
  29. end
  30. function disk = get.disk(obj)
  31. disk = obj.disk;
  32. end
  33. function showInfo(obj)
  34. disp("Computer:"+obj.name+"{CPU:"+obj.CPU+",memory:"+obj.memory+",disk:"+obj.disk+"}");
  35. end
  36. end
  37. end

Builder.m (抽象的构造者)

  1. classdef Builder < handle
  2. methods(Abstract)
  3. setName(~,~);
  4. setCPU(~,~);
  5. setMemory(~,~);
  6. setDisk(~,~);
  7. build(~);
  8. end
  9. end

ConcreteBuilder.m (具体的构造者)

  1. classdef ConcreteBuilder < Builder
  2. properties
  3. name = "";
  4. CPU = "";
  5. memory = "";
  6. disk = "";
  7. end
  8. methods
  9. function obj = setName(obj,name)
  10. obj.name = name;
  11. end
  12. function obj = setCPU(obj,CPU)
  13. obj.CPU = CPU;
  14. end
  15. function obj = setMemory(obj,memory)
  16. obj.memory = memory;
  17. end
  18. function obj = setDisk(obj,disk)
  19. obj.disk = disk;
  20. end
  21. function computer = build(obj)
  22. computer = Computer();
  23. computer.name = obj.name;
  24. computer.CPU = obj.CPU;
  25. computer.memory = obj.memory;
  26. computer.disk = obj.disk;
  27. end
  28. end
  29. end

Director.m (指导者,负责调用构造对象的逻辑,控制相应的构造顺序)

  1. classdef Director
  2. methods
  3. function computer = getComputer(~,builder)
  4. computer = builder.setName("dell")...
  5. .setCPU("intel i5")...
  6. .setMemory("4G")...
  7. .setDisk("1T")...
  8. .build();
  9. end
  10. end
  11. end

测试代码:

  1. builder = ConcreteBuilder();
  2. director = Director();
  3. computer = director.getComputer(builder);
  4. computer.showInfo();

原文链接:http://www.cnblogs.com/usaddew/p/10932157.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号