建造者模式(Bulider):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
案例需求:当需要生产一辆汽车时,我们需要为其装配发动机、轮胎、座椅等等部件,
这个装配过程是比较复杂的而且也需要较高的组装技术。而建造者模式(Builder Pattern)就是为了将部件与组装分离开。
案例UML图:
1:建造汽车类,组装一辆汽车首先需要很多配件,如发动机,轮胎,座椅等。
package BuilderModel; /**1:prodect角色,组装一辆汽车首先需要很多配件,如发动机,轮胎,座椅等。 * @author 我不是张英俊 * */ public class Car { public String engine; public String tyre; public String seat; public Car(){ } public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } public String getTyre() { return tyre; } public void setTyre(String tyre) { this.tyre = tyre; } public String getSeat() { return seat; } public void setSeat(String seat) { this.seat = seat; } }
2:知道所需要的配件之后,就需要生产配件了,定义一个生产配件的接口。
package BuilderModel; /** * 2:知道所需要的配件之后,就需要生产配件了,定义一个生产配件的接口。 * @author 我不是张英俊 * */ public interface Bulider { String buliderEngine(); String buliderTyre(); String buliderSeat(); }
3:具体制造配件的实现类。
package BuilderModel; /**3:实现抽象的 建造者接口的生成具体的建造者,并开始生产具体的配件。 * @author 我不是张英俊 * */ public class CarBuilder implements Bulider{ @Override public String buliderEngine() { //生产发动机 return "发动机"; } @Override public String buliderTyre() { //生产轮胎 return "轮胎"; } @Override public String buliderSeat() { // 生产座椅 return "座椅"; } }
4:组装汽车的类。
package BuilderModel; /** * 4:在生产完成之后,由指导者指导组装成汽车。 * @author 我不是张英俊 * */ public class CarDirector { CarBuilder cb; public CarDirector(CarBuilder cb){ this.cb=cb; } public Car constructor(){ Car car=new Car(); car.setEngine(cb.buliderEngine()); car.setSeat(cb.buliderSeat()); car.setTyre(cb.buliderTyre()); return car; } }
6:测试类。
package BuilderModel; /** * 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 * 需求:当需要生产一辆汽车时,我们需要为其装配发动机、轮胎、座椅等等部件, * 这个装配过程是比较复杂的而且也需要较高的组装技术。 * 而建造者模式(Builder Pattern)就是为了将部件与组装分离开。 * * 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说, * 只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。 * @author 我不是张英俊 * */ public class Test { public static void main(String [] args){ /** * 5:最终得到一辆汽车。 */ CarDirector cd=new CarDirector(new CarBuilder()); Car car=cd.constructor(); System.out.println(car.getEngine()); System.out.println(car.getSeat()); System.out.println(car.getTyre()); } }
7:控制台。
发动机
座椅
轮胎
总结:如果我们用了建造者模式,那么用户就只需要指定需要建造的模型就可已得到他们,二具体建造的过程和谢姐就不需要知道了。
建造者模式是在当创建复杂对行啊的算法应该独立于该对象的组合部分以及它们的装配方式时使用的模式。
StringBuffer 和StringBuilder就是建造者模式的体现。