一.建造者模式描述
Builder模式是一步一步创建一个复杂对象的创建型模式,它允许使用者在不知道内部建造细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和看不见得表示隔离开来。 因为一个复杂的对象有很多大量组成部分,如电脑,有主机,显示器,操作系统,还有各种小零件等,如何将这些看不见的组建成一台电脑,这个装配过程很漫长,也很复杂,为了在构建过程中对外部隐藏实现细节,就可以使用Builder模式将部件和组装过程分离,使得构建过程和部件都可以自由扩展,两者之间的耦合也降到最低。
二. 建造者模式定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
三.使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果。 (2)对各部件或零件,都可以配到一个对象中,但是产生的运行结果又不相同时。 (3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的结果,这个时候使用创建者模式非常合适。 (4)当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时。
四.简单实例 简单的汽车的构建
1.product类
public class CarProduct { private String wheet; private String color; private int num; private Boolean skyWindow; public String getWheet() { return wheet; } public void setWheet(String wheet) { this.wheet = wheet; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public Boolean getSkyWindow() { return skyWindow; } public void setSkyWindow(Boolean skyWindow) { this.skyWindow = skyWindow; } }2.builder接口
public interface CarBuilder<T> { /** * 车轮 */ public void buildeWheet(String wheet); /** * 车颜色 */ public void buildeColor(String color); /** * 容纳人数 */ public void buildeNum(int num); /** * 有无天窗 */ public void buildeSkyWindow(boolean skyWindow); /** * 返回一个对象实例 */ public T getInstance(); }3.conCreatBuilder实现builder接口
public class CarConCreatBuilder implements CarBuilder<CarProduct> { private CarProduct carProduct = new CarProduct(); @Override public void buildeWheet(String wheet) { carProduct.setWheet(wheet); } @Override public void buildeColor(String color) { carProduct.setColor(color); } @Override public void buildeNum(int num) { carProduct.setNum(num); } @Override public void buildeSkyWindow(boolean skyWindow) { carProduct.setSkyWindow(skyWindow); } @Override public CarProduct getInstance(){ return carProduct; } }4.director进行车的装配环节(我这里写的默认值,实际代码中可以自行传入)
public class CarDirector { public CarProduct carDirector(CarConCreatBuilder carConCreatBuilder){ carConCreatBuilder.buildeWheet("four"); carConCreatBuilder.buildeColor("white"); carConCreatBuilder.buildeNum(5); carConCreatBuilder.buildeSkyWindow(true); //返回实例 return carConCreatBuilder.getInstance(); } }5.测试代码
public class LastRun { public static void main(String[] args) { CarDirector carDirector = new CarDirector(); CarProduct carProduct = carDirector.carDirector(new CarConCreatBuilder()); System.out.println("------car infomation--------"); System.out.println(carProduct.getColor()); System.out.println(carProduct.getNum()); System.out.println(carProduct.getSkyWindow()); System.out.println(carProduct.getWheet()); } }五.总结 建造者模式分为四个部分: product:用于描述对象的属性 builder:用来提供装配对象属性的接口 conCreateBuilder:实现builder接口 director:调用构建对象的方法,并返回一个构建好的对象实例
参考博文:https://blog.csdn.net/zhuhuitao_struggle/article/details/80489572