/** * 建造者模式:一般用于复杂的对象创建,例如一个对象的多个属性都是对象,或者对象的属性太多,使用构造器初始化,参数太长,容易写错哪个参数是什么意思 * 角色:产品--产品创建者--指挥者 * 产品:如自行车:包含坐垫,轮胎等 * 创建者:组装自行车:步骤组装坐垫,组装轮胎,最后返回产品对象 * 指挥者:创建者组装坐垫,轮胎等,至少要有个先后顺序吧,先组装哪个,接着组装哪个 * 下面的例子以生产自行车为例,自行车有坐垫和轮胎2个对象,分别使用不同的创建者组装相应的自行车(摩拜和小蓝) * * */ //行车车对象 public class Bike { private ISeat seat; //坐垫对象 private Ityre ityre; //轮胎对象 public ISeat getSeat() { return seat; } public void setSeat(ISeat seat) { this.seat = seat; } public Ityre getItyre() { return ityre; } public void setItyre(Ityre ityre) { this.ityre = ityre; } } //坐垫接口 public interface ISeat { void seat(); } //黑色的坐垫 public class BlackSeat implements ISeat { @Override public void seat() { System.out.println("这是黑色的坐垫"); } } //灰色的坐垫 public class GreySeat implements ISeat { @Override public void seat() { System.out.println("这是灰色的坐垫"); } } //轮胎接口 public interface Ityre { void tyre(); } //大轮胎 public class BigTyre implements Ityre { @Override public void tyre() { System.out.println("这是大的轮胎"); } } //小轮胎 public class SmallTyre implements Ityre { @Override public void tyre() { System.out.println("这是小的轮胎"); } } //自行车组装接口 public interface BikeBuilder{ void buildSeat();//组装坐垫 void buildTyre();//组装轮胎 Bike createBike();//组装好的自行车 } //摩拜自行车组装者 public class MobikeBuilder implements BikeBuilder { private Bike bike=new Bike(); @Override public void buildSeat() { bike.setSeat(new BlackSeat()); } //黑色的坐垫 @Override public void buildTyre() { bike.setItyre(new BigTyre()); }//大的轮胎 @Override public Bike createBike() { return bike; //组装好的自行车 } } //小蓝自行车组装者 public class BlugogoBikeBuilder implements BikeBuilder { private Bike bike=new Bike(); @Override public void buildSeat() { bike.setSeat(new GreySeat()); } //灰色的坐垫 @Override public void buildTyre() { bike.setItyre(new SmallTyre()); }//小的轮胎 @Override public Bike createBike() { return bike; } } //指挥者,安排组装的顺序,(指挥者也可以省略,将其代码合并到创建者中) public class Director { private BikeBuilder bikeBuilder; public Director(BikeBuilder bikeBuilder) { this.bikeBuilder = bikeBuilder; } public Bike builBike(){ bikeBuilder.buildSeat();//先组装坐垫 bikeBuilder.buildTyre();//后组装轮胎 return bikeBuilder.createBike();//最后才返回组装的对象 } } //测试 public class Test { public static void main(String[] args) { //创建摩拜自行车 Director director = new Director(new MobikeBuilder()); Bike bike = director.builBike(); bike.getItyre().tyre(); bike.getSeat().seat(); //创建小蓝自行车 Director director2 = new Director(new BlugogoBikeBuilder()); director2.builBike().getSeat().seat(); director2.builBike().getItyre().tyre(); } }