在建造者模式中,主要有四个角色
1 建造者(接口类),抽象出对象的构建过程
2 具体的建造者(实现建造者接口),实现不同的业务逻辑
3 指挥者,调用建造者来完成业务需求
4 产品,需要创建的对象
下面给出代码示例
Cai.java 建造者
package com.BuilderMode;
/**
* 建造者Builder
*
* 给出一个抽象接口,以规范产品对象的各个组成成分的建造。
* 这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建
*/
public interface Cai {
public void fangyan(); // 放盐
public void fangyou(); // 放油
public void jiashui(); // 加水,,,等等是做菜不可缺少的步骤
}
Lisi.java 具体建造者
package com.BuilderMode;
/**
* ConcreteBuilder 具体建造者
* <p>
* 实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。
* 在建造过程完成后,提供产品的实例。
*/
public class LiSi implements Cai {
public void fangyan() {
System.out.println("LiSi fangyan");
}
public void fangyou() {
System.out.println("LiSi fangyou");
}
public void jiashui() {
System.out.println("LiSi Jiashui");
}
}
Zhangsan.java 具体建造者
package com.BuilderMode;
/**
* ConcreteBuilder 具体建造者
*
* 实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。
* 在建造过程完成后,提供产品的实例。
*/
public class ZhangSan implements Cai {
public void fangyan() {
System.out.println("ZhangSanfangyan");
}
public void fangyou() {
System.out.println("ZhangSanfangyou");
}
public void jiashui() {
System.out.println("ZhangJiashui");
}
}
Director.java 指挥者
package com.BuilderMode;
/**
* Director 指导者
*
* 调用具体建造者来创建复杂对象的各个部分,
* 在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
*/
public class Director {
Cai cai;
public Director(Cai cai) {
this.cai = cai;
}
public void zuocai() {
cai.fangyan();
cai.fangyou();
cai.jiashui();
}
}
BuildModejava 产品
package com.BuilderMode;
/**
* 使用建造者模式的好处:
* <p>
* 1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
* <p>
* 2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
* <p>
* 3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
* <p>
* 使用建造模式的场合:
* <p>
* 1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
* <p>
* 2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。
*/
public class BuilderMode {
public static void test() {
Cai cai = new ZhangSan();// 张三做菜
Director d = new Director(cai); // 指挥者
d.zuocai();// 我要指挥者弄菜,其实指挥者叫张三弄菜去了。
}
}