今天看了看建造模式,就上来写点心得体会。
先套用一段理论:建造模式是将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
怎么理解呢?
一个大的系统,我们该怎样设计?我想,对于一个好的设计来说,应该是尽量不用具体的东西来定义,正如我上篇文章最后说的,定义类型尽量用抽象的,记住,在java里,抽象是最高境界,一切具体的东西都是由抽象的实例化而来,抽象的东西可以存在,实际的东西必然也可以。我们要设计的,是一个抽象的结构,抽象的结构里的每部分,也是抽象的。对于抽象的部分,可以有不同的实现,从而整个系统可以有不同的实现。
说到这里,我想起了抽象工厂模式,这里2者之间怎么这么的相似??好,接下来就说,为什么它就要叫建造模式。
在抽象工厂模式里,由抽象工厂到具体工厂再到具体的一系列产品,用户是与工厂联系得到产品,而在建造模式里,由一个抽象的建造者引申到多个具体的建造者,具体的建造者再到产品,这里是一样的,但是,在建造模式里,还有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。再看看那套理论的最后一句,“建造模式可以强制实行一种分步骤进行的建造过程”,明白了没?建造模式“可以”强制实行一种分步骤进行的建造过程,注意是可以,不是必须的。看到这里,明白抽象工厂模式和建造模式的区别没?
下面,摘抄网上一个实现了分步骤进行的建造过程:
public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product getResult();
}
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
public class ConcreteBuilder implements Builder {
Part partA, partB, partC;
public void buildPartA() {
//这里是具体如何构建partA的代码
};
public void buildPartB() {
//这里是具体如何构建partB的代码
};
public void buildPartC() {
//这里是具体如何构建partB的代码
};
public Product getResult() {
//返回最后组装成品结果
};
}
public interface Product { }
public interface Part { }
下面是调用builder的方法:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();
建造模式就讲到这里。
先套用一段理论:建造模式是将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
怎么理解呢?
一个大的系统,我们该怎样设计?我想,对于一个好的设计来说,应该是尽量不用具体的东西来定义,正如我上篇文章最后说的,定义类型尽量用抽象的,记住,在java里,抽象是最高境界,一切具体的东西都是由抽象的实例化而来,抽象的东西可以存在,实际的东西必然也可以。我们要设计的,是一个抽象的结构,抽象的结构里的每部分,也是抽象的。对于抽象的部分,可以有不同的实现,从而整个系统可以有不同的实现。
说到这里,我想起了抽象工厂模式,这里2者之间怎么这么的相似??好,接下来就说,为什么它就要叫建造模式。
在抽象工厂模式里,由抽象工厂到具体工厂再到具体的一系列产品,用户是与工厂联系得到产品,而在建造模式里,由一个抽象的建造者引申到多个具体的建造者,具体的建造者再到产品,这里是一样的,但是,在建造模式里,还有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。再看看那套理论的最后一句,“建造模式可以强制实行一种分步骤进行的建造过程”,明白了没?建造模式“可以”强制实行一种分步骤进行的建造过程,注意是可以,不是必须的。看到这里,明白抽象工厂模式和建造模式的区别没?
下面,摘抄网上一个实现了分步骤进行的建造过程:
public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product getResult();
}
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
public class ConcreteBuilder implements Builder {
Part partA, partB, partC;
public void buildPartA() {
//这里是具体如何构建partA的代码
};
public void buildPartB() {
//这里是具体如何构建partB的代码
};
public void buildPartC() {
//这里是具体如何构建partB的代码
};
public Product getResult() {
//返回最后组装成品结果
};
}
public interface Product { }
public interface Part { }
下面是调用builder的方法:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();
建造模式就讲到这里。