一:建造者模式
在一般的对象创建中,我们使用new方式去新建一个对象(调用无参构造或者有参构造方法),然后,在高级一点的技术就是使用工厂模式去创建一个对象的实现类。以工厂模式中的最优方案抽象工厂而言,其见着的对象只有我们去使用对应的子类实现才知道其创建出一个什么样的对象。
这里就有一种新的创建方式:建造者方式。其基本的流程图如下:
似乎,建造者模式对于创建一个新的对象不如new简洁,不如工厂具有多样的抽样性。但是,建造者核心是对于对象的每一个属性都可控。
二:示例说明
1.实体类
package com.springcloud.search;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Human {
private String head;
private String body;
private String hand;
private String foot;
}
2.创建实体对象的接口
package com.springcloud.search;
public interface IBuildHuman {
public void buildHead();
public void buildBody();
public void buildHand();
public void buildFoot();
public Human createHuman();
}
3.接口实现
package com.springcloud.search;
public class SmartManBuilder implements IBuildHuman {
Human human;
public SmartManBuilder(){
human = new Human();
}
@Override
public void buildHead() {
human.setHead("智商180的头脑");
}
@Override
public void buildBody() {
human.setBody("新的身体");
}
@Override
public void buildHand() {
human.setHand("新的手");
}
@Override
public void buildFoot() {
human.setFoot("新的脚");
}
@Override
public Human createHuman() {
return human;
}
}
4.建造器
package com.springcloud.search;
public class Director {
public Human createHumanByDirecotr(IBuildHuman bh){
bh.buildBody();
bh.buildFoot();
bh.buildHand();
bh.buildHead();
return bh.createHuman();
}
}
5.测试类
package com.springcloud.search;
public class BuilderTest {
public static void main(String[] args){
Director director = new Director();
Human human = director.createHumanByDirecotr(new SmartManBuilder());
System.out.println(human.getHead());
System.out.println(human.getBody());
System.out.println(human.getHand());
System.out.println(human.getFoot());
}
}
三:理解
1.代码说明
整个流程
2.理解
然后我个人的理解:上诉流程在创建对象不如一个new方便,快捷。其实在单例,工厂以及这里的都是创建对象的方式,单例不用说,然后工厂使用率最高的抽线工厂创建对象具有过程不可控,简而言之,你只需关注创建了哪一个对象,最多也只能创建捏抽象工厂的实现的个数,即有5个工厂实现,你最多创建5个不同类型的子对象。而建造者把控了创建过程,实现过程多控制。