加班后去吃蛋炒饭,没想到老板也是程序员
共 4212字,需浏览 9分钟
·
2021-05-20 09:53
目录
故事
建造者模式简介
代码类图
建造者模式应用场景
建造者模式优缺点
思维导图
前言
夜幕下。加班到深夜的码妞,电脑包中已经极致轻薄的香蕉Book Pro,似泰山一半压在她疲惫的身躯上。缓缓的来到“35程序员炒饭店”前。
老板码仔,关切的问道:“今天出Bug了?脸色这么差!”
简介
建造者模式属于创建型模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单说就是:将复杂对象的创建、拆分成多个步骤。
代码类图
生成器(Build):它是一个包含创建产品各个子部件的抽象方法的接口或抽象类,通常还包含一个返回复杂产品的方法 getResult();
具体生成器(Concrete Builders):Builder的具体实现,完成复杂产品的各个部件的具体创建方法;
主管(Dirctoer):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息;
产品(Products):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。
class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
public void show() {
//显示产品的特性
}
}
abstract class Builder {
//创建产品对象
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//返回产品对象
public Product getResult() {
return product;
}
}
public class ConcreteBuilder extends Builder {
public void buildPartA() {
product.setPartA("Builder PartA");
}
public void buildPartB() {
product.setPartB("Builder PartB");
}
public void buildPartC() {
product.setPartC("Builder PartC");
}
}
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//产品构建与组装方法
public Product construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
public class Client {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.construct();
product.show();
}
}
用写代码15年的手!光速炒熟。哦!不!光速创建对象。
应用场景、优缺点
场景:
构造函数参数过多,产生重叠构造函数现象时;
需要用类似代码创建不同形式对象时;
对象创建的过程复杂时;
优点:
符合单一责任原则。将构造代码从业务逻辑中抽离出来;
封装性好,对象的创建和表示分离,实现了解耦;
需要增加新的建造者时、不需修改原有代码、符合“开闭原则“。
扩展性好,各个具体的建造者相互独立,有利于系统的解耦。
缺点:
代码复杂度提升、维护难度高;
创建对象相似度高,限制了使用范围。
如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,提升后期维护成本。
思维导图
程序员不学好设计模式,35岁后。想炒饭!都没人要!
SpringBoot开发秘籍 - 集成Graphql Query
欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。