有些时候很难一次性组装具有复杂结构的实例,用于组装复杂结构实例的模式就是建造者模式。
类图:
这里Builder
类声明了编写文档的方法,具体实现交由其子类。HTMLBuilder
和TextBuilder
继承了Builder
,用于生成html网页和普通文本。Director
持有一个Builder
的实例,用于指挥构造文本。Main函数利用Director
来生成文档。
代码:
1 | public abstract class Builder { |
1 | import java.io.*; |
1 | public class Director { |
Director
类中持有的是Buider
实例,并不关心是TextBuilder
或者是HTMLBuilder
,因此可以任意替换具体的Builder
,而可以任意替换正是设计模式的目标。
1 | public class Main { |
Main函数对于具体的构造文本过程同样一无所知,只是调用了Director
的construct()
方法。Director
修改时,Main
函数可以保持不变。