java的这些设计模式都离不开接口与抽象类,果然java里接口和抽象类的掌握是关键啊
这builder模式又得靠接口/抽象类来构建
Briger模式是把对象的属性和行为分隔开来,以至能使2部分都能独立的变化,这个builder模式是为了分离复杂对象里的组件的构建和复杂对象本身的构建过程的模式,这样复杂对象的子组件的构建和复杂对象本身的构建都可以独立的发生变化
其关键是子对象的构建方法被builder委派给了一个接口及其这个接口的实现类,这样子类的构建方法就有了动态性
然后在一个外在的管理类中去调用这个接口对象,手动的去调用子组件的初始化循序,以控制复杂对象本身的构造循序
uml类图
列子
我要构建一个飞船对象 包括一个发动机和雷达 飞船和这2个组件是聚合关系
public class SpaceShip {
private Engine engine;//发动机
private Raid radar;//雷达
public void setEngine(Engine engine) {
this.engine = engine;
}
public void setRaid(Raid raid) {
this.raid = raid;
}
}
构造实现雷达和发动机方法的接口还有一个得到整船的方法
public interface Builder {
void buildEngine();
void buildRaid();
SpaceShip getShip();
}
实现builder的子类
public class BuilderImpl implements Builder {
private SpaceShip ship;
public void buildEngine() {
ship.setEngine(new Engine());
}
public void buildRaid() {
ship.setRadar(new Raid());
}
public SpaceShip getShip() {
// TODO Auto-generated method stub
return this.ship;
}
}
一个负责子部件构造循序的管理类
public class Director {
public Director(Builder builder){
builder.buildEngine();
builder.buildRaid();
}
}
外部调用
Builder builder = new BuilderImpl();//组件构建实现者
Director d = new Director(builder);//组装执行者
SpaceShip ship = builder.getShip();//获得整船
这样我们在构造ship对象的时候不可以不管子组件是如何构建的拉,而且我们可以根据需要对子组件的构造方法动态的进行修改 只要让builder接口指向不同的实现对象就行了