设计模式-创建型模式#建造者模式Builder
Beginning
设计模式-创建型模式#抽象工厂AbstractFactory
建造者模式
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
1、当创建复杂对象的算法应该独立于改对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
参与者
1、Builder
为创建一个Product对象的各个部件指定抽象接口。
2、ConcreteBuilder
实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口。
3、Director
构造一个使用Builder接口的对象
4、Product
表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它
的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
类图:
实线箭头表示单向关联,即:关联类知道被关联类的公共属性及操作,但被关联类 并不知道关联类的公共属性及操作。
关联单向、双向之分。双向关联用没有箭头的实线表示 ,实线箭头表示Object Message,也就是类间的消息发送,
比如:方法调用和请求等等,这些都是从一方向另一方主动发出信息。
虚线箭头表示两个类之间存依赖关系。即:一个类引用另一个类。只存在单向依赖。 虚线箭头表示Return Message,
虚线箭头表示两个类之间存依赖关系。即:一个类引用另一个类。只存在单向依赖。 虚线箭头表示Return Message,
一般用于表示方法调用后的返回信息
代码中的表现:
实线代表有引用的关联,一般代码中会直接有关联的类的引用,但虚线就没有,一般知识方法上的调用关系。如是而已。
package com.dsp;
public class Person {
private String head;
private String body;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
package com.dsp;
public class Man extends Person {
}
package com.dsp;
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
package com.dsp;
public class ManBuilder implements PersonBuilder {
Person person;
public ManBuilder() {
person = new Man();
}
@Override
public void buildHead() {
person.setHead("建造男人的头");
}
@Override
public void buildBody() {
person.setBody("建造男人的身体");
}
@Override
public void buildFoot() {
person.setFoot("建造男人的脚");
}
@Override
public Person buildPerson() {
return person;
}
}
package com.dsp;
public class PersonDirector {
public Person constructPerson(PersonBuilder pb){
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
package com.dsp;
public class Test {
public static void main(String[] args) {
PersonDirector pd = new PersonDirector();
Person person = pd.constructPerson(new ManBuilder());
System.out.println(person.getHead());
System.out.println(person.getBody());
System.out.println(person.getFoot());
}
}
控制台输出:
建造男人的头
建造男人的身体
建造男人的脚
Ending
本文如果对您有帮助欢迎打赏作者,多少随意一分也是爱!
作者:Java夜未眠
出处:https://www.cnblogs.com/liangxianning/p/17058258.html
版权声明:本博客所有文章除特别声明外,均采用「 MIT 许可协议。」许可协议进行许可
关于博主: 评论和私信会可能回复较慢,点击上面加人图标加我为好友吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)