java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式
## 定义 ##
将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。
Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,
它把复合对象的***创建过程加以抽象***,通过子类继承和重载的方式,
动态地创建具有复合属性的对象。
## 代码示例 ##
public interface Engine {
void run();
}
public class HighEngine implements com.design_pattern.Builder.Engine {
public void run() {
System.out.println("跑的快");
}
}
public class LowEngine implements com.design_pattern.Builder.Engine {
public void run() {
System.out.println("跑的慢");
}
}
public interface Seat {
void msg();
}
public class HighSeat implements com.design_pattern.Builder.Seat {
public void msg() {
System.out.println("很舒服");
}
}
public class LowSeat implements com.design_pattern.Builder.Seat {
public void msg() {
System.out.println("不是很舒服");
}
}
public class Car {
private Engine engine;
private Seat seat;
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public Seat getSeat() {
return seat;
}
public void setSeat(Seat seat) {
this.seat = seat;
}
}
public interface CarBuilder {
void makeEngine();
void makeSeat();
}
public class HighCarBuilder implements CarBuilder {
Car car = new Car();
public void makeEngine() {
car.setEngine(new HighEngine());
}
public void makeSeat() {
car.setSeat(new HighSeat());
}
public Car getCar() {
return car;
}
}
public class LowCarBuilder implements CarBuilder {
Car car = new Car();
public void makeEngine() {
car.setEngine(new LowEngine());
}
public void makeSeat() {
car.setSeat(new LowSeat());
}
public Car getCar() {
return car;
}
}
public class CarDirector {
public void makeCar(CarBuilder carBuilder) {
carBuilder.makeEngine();
carBuilder.makeSeat();
}
}
##测试##
public class Main {
public static void main(String[] args) {
CarDirector carDirector = new CarDirector();
LowCarBuilder lowCarBuilder = new LowCarBuilder();
HighCarBuilder highCarBuilder = new HighCarBuilder();
carDirector.makeCar(lowCarBuilder);
carDirector.makeCar(highCarBuilder);
Car lowCar = lowCarBuilder.getCar();
lowCar.getEngine().run();
lowCar.getSeat().msg();
Car highCar = highCarBuilder.getCar();
highCar.getEngine().run();
highCar.getSeat().msg();
}
}
## 优点 ##
1.生成器模式将对象的构造过程封装在具体的生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。
2.生成器模式将对象的构造过程从创建该对象的类中分离出来,使用户无须了解该对象的具体组件。
3.可以更加精细有效的控制对象的构造过程。生成器将对象的构造过程分解成若干步骤,
这就是程序可以更加精细,有效的控制整个对象的构造。
4.生成器模式将对象的构造过程与创建该对象类解耦,使对象的创建更加灵活有弹性。
5.当增加新的具体的生成器时,不必修改指挥者的代码,即该模式满足开-闭原则。
##解析##
- 抽象工厂注重的是不同的工厂生产不同的产品,builder注重的是某个产品由不同的零件组成,产品的生产工程。Director就是负责产品组装的,是控制生产过程的;而builder是负责产品部件生产的。这样就实现了“过程”和“部件”的解耦。抽象工厂通过不同的构建过程生成不同的对象表示,而Builder模式通过相同的构建过程生成不同的表示。
- StringBuilder的append();JDBC的PreparedStatement;JDOM的DomBuilder、SAXBuilder;MyBatis的SqlSessionFactoryBuilder。