package mode.bulider;/*** * 首先是汽车,组成零件有:玻璃、轮胎、发动机;他们都是抽象的概念,所以用抽象类来创建* * */
public class Car {Glass glass;Wheel wheel;Engine engine;
}
package mode.bulider;
/*** * 抽象的玻璃* * */
public abstract class Glass {}
package mode.bulider;public class AmericanGlass extends Glass {public String toString() {return "\"American Glass\"";}
}
package mode.bulider;public class JapaneseGlass extends Glass {public String toString() {return "\"Japanese Glass\"";}
}
package mode.bulider;
/*** * 抽象的轮胎* * */
public abstract class Wheel {}
package mode.bulider;public class AmericanWheel extends Wheel {public String toString() {return "\"American Wheel\"";}
}
package mode.bulider;public class JapaneseWheel extends Wheel {public String toString() {return "\"Janpanes Wheel\"";}
}
package mode.bulider;
/*** * 抽象的发动机* * */
public abstract class Engine {}
package mode.bulider;public class ChineseEngine extends Engine {public String toString() {return "\"Chinese Engine\"";}
}
package mode.bulider;public class FranceEngine extends Engine {public String toString() {return "\"France Engine\"";}
}
package mode.bulider;/*** * 创建一个汽车的构造器* * */
public interface CarBuilder {public void buildGlass();public void buildWheel();public void buildEngine();public Car getProduct();
}
下面是两个具体的实现
package mode.bulider;public class CarABuilder implements CarBuilder {private Car product = null;public CarABuilder() {product = new Car();}@Overridepublic void buildGlass() {product.glass = new AmericanGlass();}@Overridepublic void buildWheel() {product.wheel = new AmericanWheel();}@Overridepublic void buildEngine() {product.engine = new ChineseEngine();}@Overridepublic Car getProduct() {buildGlass();buildEngine();buildWheel();return product;}}
package mode.bulider;public class CarBBuilder implements CarBuilder {private Car product;public CarBBuilder() {product = new Car();}@Overridepublic void buildGlass() {product.glass = new JapaneseGlass();}@Overridepublic void buildWheel() {product.wheel = new JapaneseWheel();}@Overridepublic void buildEngine() {product.engine = new FranceEngine();}@Overridepublic Car getProduct() {buildEngine();buildGlass();buildWheel();return product;}}
package mode.bulider;/*** * 构造器引导措施* * */
public class Director {private CarBuilder builder;public Director(CarBuilder builder) {this.builder = builder;}public Car Construct() {return builder.getProduct();}
}
测试
package mode.bulider;public class Test {public static void main(String[] args) {Director d1 = new Director(new CarABuilder());Director d2 = new Director(new CarBBuilder());d1.Construct();d2.Construct();}
}