生成器模式Builder
2024-10-07 16:12:47
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11406502.html
1. 定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2. 结构图
Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。
3. 本质
生成器模式的本质:分离整体构建算法和部件构造。
构建一个复杂的对象,本来就有构建的过程,以及构建过程中具体的实现。生成器模式就是用来分离这两个部分,从而使得程序结构更松散、扩展更容易、复用性更好,同时也会使得代码更清晰,意图更明确。
虽然在生成器模式的整体构建算法中,会一步一步引导Builder来构建对象,但这并不是说生成器主要就是用来实现分步骤构建对象的。生成器模式的中心还是在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物。
4. Code Demo
Product.java
package org.fool.dp.builder; public interface Product {
}
Builder.java
package org.fool.dp.builder; public interface Builder {
void buildPart();
}
ConcreteBuilder.java
package org.fool.dp.builder; public class ConcreteBuilder implements Builder {
private Product product; public Product getResult() {
return product;
} @Override
public void buildPart() {
System.out.println("build part...");
}
}
Director.java
package org.fool.dp.builder; public class Director {
private Builder builder; public Director(Builder builder) {
this.builder = builder;
} public void construct() {
builder.buildPart();
}
}
Client.java
package org.fool.dp.builder; public class Client {
public static void main(String[] args) {
ConcreteBuilder builder = new ConcreteBuilder(); Director director = new Director(builder); director.construct(); Product result = builder.getResult();
System.out.println(result);
}
}
最新文章
- SpringMVC学习记录4
- 局部(或全局)设置<;a>;标签的target属性
- continue 语句
- Ecshop的购物流程代码分析详细说明
- LoadRunner 文本检查点使用
- 【移动开发】安卓Lab2(02)
- .NET清楚Cookies
- aliyun 购买的linux安装tomcat
- Java中集合List,Map和Set的区别
- js的构造函数共用事例
- [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
- #7 Python顺序、条件、循环语句
- struts2马士兵笔记
- .NET:System.Security.Cryptography.CryptographicException 的解决办法
- Tomcat默认界面可导致版本信息泄露+管理后台爆破
- js replace 用法
- Python的ipython的安装
- 单选 name的值相同时候 就会产生互斥现象
- Bugku 速度要快
- regular expression, grep (python, linux)