建造者模式,我在项目中用到的算是最多的设计模式了,该设计模式比较简单,容易懂

还是一如既往地,先看一下它的概念:

概念

建造者模式   建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是鱼香肉丝,来北方最之后印象最深的是宫保鸡丁。哈哈),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

建造者设立初衷就是需要什么“造”什么,从而在用的时候再拿该字段

比如说,再“造人”的时候,需要造手,胳膊,腿,脚,眼睛,鼻子...等等

就可以将这些封装为一个对象,让建造者类创建“人”,造好之后再“还”给主对象; 开始一个demo

package org.choviwu.movie.test.builder;

import lombok.Data;

public class User {

    private int hands;
    private int eye;
    private int leg;
    private int mouse;

	//将对象的所有零部件托管到建造器上,并由它来创建,需要哪个零件创建哪个
    @Data
    public static class Builder{

        private int hands;
        private int eye;
        private int leg;
        private int mouse;

        public Builder setHandls(int hands){
            this.hands = hands;
            return this;
        }

        public Builder setEye(int eys){
            this.eye = eys;
            return this;
        }

        public Builder setLeg(int leg){
            this.leg = leg;
            return this;
        }
        public Builder setMouse(int mouse){
            this.mouse = mouse;
            return this;
        }
		//建造完成  使用build方法传回对象
        public User build(){
            return new User(this);
        }

    }
	//返回一个默认有参构造,用来接收建造器传送的零件
    public User  (Builder builder){
        this.hands = builder.hands;
        this.eye = builder.eye;
        this.leg = builder.leg;
        this.mouse = builder.mouse;

    }
    public static void main(String[] args) {
        new User.Builder().setEye(2).setHandls(2)
                .setLeg(2).setMouse(1).build();
    }
}

在lombok里,为我们已经集成好了建造器模式,用法跟本例一样,只需要一个一个注解@Builder,方便开发,也节省代码空间

package org.choviwu.movie.test.builder;

import lombok.Builder;
import lombok.Data;
@Builder
public class User {

    private int hands;
    private int eye;
    private int leg;
    private int mouse;
 

    public static void main(String[] args) {
        
        User.builder().hands(2).eye(2).leg(2).mouse(1)
                .build();
    } 
}

只需要这样写就ok啦,是不是节省了许多代码~~