design pattern : Builder
将一个复杂对象的 构建 与他的 表示 分离,使同样的构建可以有不同的表示
此模式是一步一步创建一个复杂对象,用户通过制定复杂对象的类型和内容来构建对象,without knowing the details about creation. similar to abstract factory
使用目的,将复杂对象的构建过程和其部件解耦
simple,以装自行车为例,假设自行车由2部件组成,轮子和车架
Builder模式就是把自行车的创建和部件的创建分别开来,分别用Builder 和 Director类
先建一个接口,定义部件的创建
public interface Builder {
//创建部件轮子
void wheel();
//创建部件车架
void Sketon();
//返回最后组装成品结果 (返回最后装配好的自行车)
//成品的组装过程不在这里进行,而是转移到下面的 Director 类中
进行.
//从而实现了解耦过程和部件
Bike getResult();
}
用Director来组装
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
// 将部件 partA partB 最后组成复杂对象
//这里是将车轮 车架组装成自行车的过程
public void construct() {
builder.wheel();
builder.sketon();
}
}
实现接口
public class ConcreteBuilder implements Builder {
Part partA, partB, partC;
public void wheel() {
//这里是具体如何构建 wheel 的代码
System.out.println("wheels have been built!");
};
public void sketon() {
//这里是具体如何构建 sketon 的代码
System.out.println("sketon have been built!");
};
public Bike getResult() {
Bike bike1 =null;
System.out.println("bike have been built!");
return bike1;
};
}
复杂对象:产品 Bike
public interface Product { }
部件:
public interface Part { }
简单的 Test函数
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Bike product = builder.getResult();
}
Builder 模式的应用
在 Java 实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,
并且这些资源需要被很多用户反复共享时,就需要使用池.
"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一
个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改
Builder 模式中 Director 类使之能诊断"断肢"断在哪个部件上,再修复这个部件.