首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,086 阅读
2
类的加载
742 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
587 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
389
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
1
篇与
的结果
2022-08-31
创建者模式-建造者模式
(1)概述将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示(2)结构抽象建造者类(Builder):该接口规定要实现复杂对象的哪些部分的创建,并不涉及具体部件的创建具体建造者类(ConcreteBuilder):实现 Builder 接口,完成复杂对象的各个部件的具体创建方法,在构造过程完成后,提供产品的实例产品类(Product):要创建的复杂对象指导者类(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建(3)实例以生产单车为例public class Bike { private String frame; private String seat; public String getFrame() { return frame; } public void setFrame(String frame) { this.frame = frame; } public String getSeat() { return seat; } public void setSeat(String seat) { this.seat = seat; } }public abstract class Builder { protected Bike bike = new Bike(); /** * 生产车架 */ public abstract void buildFrame(); /** * 生产车座 */ public abstract void buildSeat(); /** * 生产自行车 * * @return */ public abstract Bike createBike(); public Bike construct() { this.buildFrame(); this.buildSeat(); return this.createBike(); } }public class QingJuBuilder extends Builder{ @Override public void buildFrame() { bike.setFrame("青桔牌车架"); } @Override public void buildSeat() { bike.setSeat("青桔牌车座"); } @Override public Bike createBike() { return bike; } } public class MeiTuanBuilder extends Builder { @Override public void buildFrame() { bike.setFrame("美团牌车架"); } @Override public void buildSeat() { bike.setSeat("美团牌车座"); } @Override public Bike createBike() { return bike; } }public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } /** * 组装自行车 */ public Bike construct() { builder.buildFrame(); builder.buildSeat(); return builder.createBike(); } }public class Client { public static void main(String[] args) { //指导者 Director director = new Director(new QingJuBuilder()); //指导者指导生产自行车 Bike bike = director.construct(); System.out.println(bike.getFrame()); System.out.println(bike.getSeat()); } }以上实例可以将指导者和抽象建造者结合,这样做可以简化系统复杂度,但不符合单一职责原则public abstract class Builder { protected Bike bike = new Bike(); /** * 生产车架 */ public abstract void buildFrame(); /** * 生产车座 */ public abstract void buildSeat(); /** * 生产自行车 * * @return */ public abstract Bike createBike(); public Bike construct() { this.buildFrame(); this.buildSeat(); return this.createBike(); } }(5)优缺点封装性好,建造者模式可以有效的封装变化,在该过程中,产品类与建造者类相对稳定,将复杂的业务逻辑封装在指导者类中对整体而言有较好的稳定性在建造者模式中,客户端无需关心产品内部组成的细节,将产品本身与创建的过程解耦,使得相同的创建过程可以建造不同的产品可以更细粒度的控制产品的创建过程,即将复杂对象的创建步骤分解在不同的方法中,可以使创建过程更加清晰,也可以更好的控制创建过程易扩展,当有同类产品的新的需求时,新增一个建造者就可以完成,符合开闭原则建造者模式所创建的产品一般来说有较多的相同点,其组成部分相似,如果产品之间差异较大,则不适合使用建造者模式,使其适用范围受限(6)使用场景创建的对象较复杂,有多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的(7)扩展当一个类的构造器需要传入很多参数时,如果创建该类的实例,可能导致代码可读性差和引入新的错误,此时可以使用建造者模式进行重构public class Phone { private String cpu; private String screen; private String memory; private String mainBoard; //私有构造器 private Phone(Builder builder) { this.cpu = builder.cpu; this.screen = builder.screen; this.memory = builder.memory; this.mainBoard = builder.mainBoard; } public static final class Builder { private String cpu; private String screen; private String memory; private String mainBoard; public Builder cpu(String cpu) { this.cpu = cpu; return this; } public Builder screen(String screen) { this.screen = screen; return this; } public Builder memory(String memory) { this.memory = memory; return this; } public Builder mainBoard(String mainBoard) { this.mainBoard = mainBoard; return this; } //使用建造者创建Phone对象 public Phone build() { return new Phone(this); } } @Override public String toString() { return "Phone{" + "cpu='" + cpu + '\'' + ", screen='" + screen + '\'' + ", memory='" + memory + '\'' + ", mainBoard='" + mainBoard + '\'' + '}'; } }
2022年08月31日
57 阅读
0 评论
0 点赞