标签:装机 erb pos class arch direct print 优点 blank
在学习MyBatis的过程中遇到了建造者(Builder)模式,查找了相关资料,在这做下记录加深印象。
参考资料:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,通俗的说就是:建造者模式就是如何一步步构建一个包含多个组成部件的对象,相同的构建过程可以创建不同的产品。
小明想组装一个台式电脑,小明对电脑配置一窍不通,就直接跑到电脑城给装机老板说我要一台打游戏非常爽的电脑,麻烦你给装一下「配置什么的你给我推荐一下吧」,于是老板就让它的员工「小美」按小明的要求装了一个性能灰常牛 B 的电脑,1 个小时后电脑装好了,小明交钱拿电脑走人。不一会儿小张又来了,要一个满足平时写文章就可以的电脑,老板针对小张的要求给不同的装机配置。不同的人有不同的配置方案「但是装机流程是一样的」,这就是一个典型的建造者模式。
1 package club.nipengfei.demo02; 2 3 /** 4 * 产品类--被建造的对象 5 */ 6 public class Computer { 7 private String cpu ; // cpu 8 private String hardDisk ; //硬盘 9 private String mainBoard ; // 主板 10 private String memory ; // 内存 11 12 public String getCpu() { 13 return cpu; 14 } 15 16 public void setCpu(String cpu) { 17 this.cpu = cpu; 18 } 19 20 public String getHardDisk() { 21 return hardDisk; 22 } 23 24 public void setHardDisk(String hardDisk) { 25 this.hardDisk = hardDisk; 26 } 27 28 public String getMainBoard() { 29 return mainBoard; 30 } 31 32 public void setMainBoard(String mainBoard) { 33 this.mainBoard = mainBoard; 34 } 35 36 public String getMemory() { 37 return memory; 38 } 39 40 public void setMemory(String memory) { 41 this.memory = memory; 42 } 43 }
1 package club.nipengfei.demo02; 2 3 /** 4 * 抽象的建造者,即装电脑的步骤 5 * 至于安装什么型号的主板,不是我关心,而是具体的建造者关心的 6 */ 7 public interface Builder { 8 // 安装主板 9 void createMainBoard(String mainBoard) ; 10 // 安装 cpu 11 void createCpu(String cpu) ; 12 // 安装硬盘 13 void createhardDisk(String hardDisk) ; 14 // 安装内存 15 void createMemory(String memory) ; 16 // 组成电脑 17 Computer createComputer() ; 18 }
1 package club.nipengfei.demo02; 2 3 public class AssemblerBuilder implements Builder { 4 Computer computer = new Computer(); 5 @Override 6 public void createMainBoard(String mainBoard) { 7 computer.setMainBoard(mainBoard); 8 } 9 10 @Override 11 public void createCpu(String cpu) { 12 computer.setCpu(cpu); 13 } 14 15 @Override 16 public void createhardDisk(String hardDisk) { 17 computer.setHardDisk(hardDisk); 18 } 19 20 @Override 21 public void createMemory(String memory) { 22 computer.setMemory(memory); 23 } 24 25 @Override 26 public Computer createComputer() { 27 return computer; 28 } 29 }
package club.nipengfei.demo02; /** * 声明一个导演类「指挥者,这里可以装电脑的老板」,用来指挥组装过程,也就是组装电脑的流程 */ public class Director { private Builder builder; // 使用多态,装机工很多,老板可以指挥各个装几个 public Director(Builder builder){ this.builder = builder; } // 老板最后只想获得装成的成品 public Computer createComputer(String cpu,String hardDisk,String mainBoard,String memory){ // 具体工作是装机工去做 this.builder.createMainBoard(mainBoard); this.builder.createCpu(cpu); this.builder.createMemory(memory); this.builder.createhardDisk(hardDisk); return this.builder.createComputer(); } }
1 package club.nipengfei.demo02; 2 3 public class Test { 4 public static void main(String[] args) { 5 // 装机员小美 6 Builder builder = new AssemblerBuilder(); 7 // 老板把小明的需求转给小美 8 Director director = new Director(builder); 9 // 老板最后拿到成品电脑,工作小美去做 10 Computer computer = director.createComputer("Intel 酷睿i9 7900X","三星M9T 2TB (HN-M201RAD)","技嘉AORUS Z270X-Gaming 7","科赋Cras II 红灯 16GB DDR4 3000"); 11 System.out.println("小明使用的电脑是:\n"+computer.getMainBoard()+"主板\n"+computer.getCpu()+"CPU\n"+computer.getHardDisk()+"硬盘\n"+computer.getMemory()+"内存\n"); 12 } 13 }
1 小明使用的电脑是: 2 技嘉AORUS Z270X-Gaming 7主板 3 Intel 酷睿i9 7900XCPU 4 三星M9T 2TB (HN-M201RAD)硬盘 5 科赋Cras II 红灯 16GB DDR4 3000内存
建造者模式是一种创建型模式,适用于那些流程固定「顺序不一定固定」,建造的目标对象会有所改变这种场景「比如画一条狗,这个目标不变,但是不同的是有黄狗,胖狗,瘦狗等」。上面的示例中安装电脑的流程是固定的,建造的目标对象会改变,Computer.java的对象不同,可以有不同的主板,CPU,硬盘,内存。
标签:装机 erb pos class arch direct print 优点 blank
原文地址:https://www.cnblogs.com/qzwl/p/11805954.html