您当前的位置: 首页 > 

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

创建型模式:建造者

发布时间:2020-06-26 09:05:57 ,浏览量:0

建造者(Builder)模式也被称为生成器模式,创建型模式是主要是为了解决对象的创建的方式,相较于单态则是为了保证创建的对象的唯一性问题,建造者模式是为了解决复杂对象的创建,尤其是子对象的构建过程存在顺序和逻辑关系的时候。

模式场景与说明

比如对象由多个复杂的子对象组成的情况,多个对象组成的方式一般较为稳定,但是子对象的创建过程可能会发生变化,根据OCP原则,可以考虑对子对象的创建过程进行封装。

实现方式

一个通用创建型模式的使用可能会有如下部分组成:

组成部分 类型 作用 Product 类 创建的内容 Builder 接口 包含返回Product的build或者composite方法 ConcreteBuilder 具体建造类 实现了Builder接口的具体建造类,此类在加载时会创建一个Product对象 Director 调配类 一般此类的构建函数包含Builder类型的参数,通过此类提供统一的调配,包括顺序和逻辑,简单场景下可以不需要此类的存在 示例概要

在这里插入图片描述

代码示例
// Product class Computer { private String cpu; private String memory; private String graphics; private String motherboard; public void setCpu(String cpu) { this.cpu = cpu; } public void setMemory(String memory) { this.memory = memory; } public void setGraphics(String graphics) { this.graphics = graphics; } public void setMotherboard(String motherboard) { this.motherboard = motherboard; } @Override public String toString(){ return "Computer information: \n" + "CPU: " + this.cpu + "\n" + "Memory: " + this.memory + "\n" + "Graphics: " + this.graphics + "\n" + "Motherboard: " + this.motherboard; } } interface Builder { void buildMotherboard(String motherboard); void buildGraphics(String graphics); void buildCpu(String cpu); void buildMemory(String memory); Computer build(); } class ConcreteBuilder implements Builder { private Computer computer = new Computer(); @Override public void buildMotherboard(String motherboard){ this.computer.setMotherboard(motherboard); } @Override public void buildGraphics(String graphics){ this.computer.setGraphics(graphics); } @Override public void buildCpu(String cpu) { this.computer.setCpu(cpu); } @Override public void buildMemory(String memory){ this.computer.setMemory(memory); } @Override public Computer build(){ return this.computer; } } class Director { private Builder builder = null; Director(Builder builder) { this.builder = builder; } Computer buildComputer(String motherboard, String graphics, String cpu,String memory) { this.builder.buildMotherboard(motherboard); this.builder.buildGraphics(graphics); this.builder.buildCpu(cpu); this.builder.buildMemory(memory); return this.builder.build(); } } public class BuilderTest { public static void main(String[] args) { Builder builder = new ConcreteBuilder(); Director director = new Director(builder); Computer computer = director.buildComputer("820-00xxx", "Intel Iris Pro 1536 MB","2.5 GHz Quad-Core Intel Core i7","16 GB 1600 MHz DDR3"); System.out.print(computer); } } 

执行结果为:

Computer information: 
CPU: 2.5 GHz Quad-Core Intel Core i7
Memory: 16 GB 1600 MHz DDR3
Graphics: Intel Iris Pro 1536 MB
Motherboard: 820-00xxx

但是需要注意此模式解决的问题和Factory不同,因此它是在具体建造类的加载期间就生成了Product的实例,可结合如下示例代码进行进一步的思考

Builder builder = new ConcreteBuilder(); Director director = new Director(builder); Computer computer = director.buildComputer("820-00xxx", "Intel Iris Pro 1536 MB","2.5 GHz Quad-Core Intel Core i7","16 GB 1600 MHz DDR3"); System.out.println(computer); Computer computer2 = director.buildComputer("830-00xxx", "Intel Iris Pro 3032 MB","2.5 GHz Quad-Core Intel Core i7","32 GB 1600 MHz DDR3"); System.out.println(computer2); System.out.println(computer); 

执行结果如下所示

Computer information: 
CPU: 2.5 GHz Quad-Core Intel Core i7
Memory: 16 GB 1600 MHz DDR3
Graphics: Intel Iris Pro 1536 MB
Motherboard: 820-00xxx
Computer information: 
CPU: 2.5 GHz Quad-Core Intel Core i7
Memory: 32 GB 1600 MHz DDR3
Graphics: Intel Iris Pro 3032 MB
Motherboard: 830-00xxx
Computer information: 
CPU: 2.5 GHz Quad-Core Intel Core i7
Memory: 32 GB 1600 MHz DDR3
Graphics: Intel Iris Pro 3032 MB
Motherboard: 830-00xxx
其他设计模式
  • https://liumiaocn.blog.csdn.net/article/details/106954154
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3740s