首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
制作者模式(Builder Pattern)
返回列表
发新帖
制作者模式(Builder Pattern)
[复制链接]
发表于 2025-12-23 00:17:09
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
制作者模式(Builder Pattern)
制作者模式是一种
创建型计划模式
,它将一个复杂对象的构造与它的表现分离,使得同样的构建过程可以创建差别的表现。
原理
核心头脑
:通过一步步的构建过程来创建复杂对象,而不是直接调用构造函数。
实用场景
:必要创建的对象包罗多个部分,且构造过程相对复杂时。
到场脚色
:
Builder(抽象制作者)
:界说构建产物各部分的抽象接口。
ConcreteBuilder(详细制作者)
:实现 Builder 接口,构造并装配详细的产物。
Product(产物)
:要创建的复杂对象。
Director(指挥者)
:界说构造步调的次序,将构建过程委托给制作者对象。
优点
分步构建
:允许通太过步调的方式构造对象,构造过程清晰。
易于扩展
:可以机动地创建差别的对象表现。
解耦构建过程与表现
:更易维护和扩展。
缺点
复杂性增长
:对于简单对象的创建会显得过于复杂。
依靠 Director
:必要额外引入指挥者脚色。
示例
代码
场景形貌
计划一个
MealBuilder
用于创建差别范例的套餐(如素食套餐和非素食套餐)。每个套餐包罗主食(主菜)、饮料和甜品。
1. 界说产物类
// 产品类:Meal
public class Meal {
private String mainCourse;
private String drink;
private String dessert;
// Setter 方法
public void setMainCourse(String mainCourse) {
this.mainCourse = mainCourse;
}
public void setDrink(String drink) {
this.drink = drink;
}
public void setDessert(String dessert) {
this.dessert = dessert;
}
// 展示方法
public void showItems() {
System.out.println("Meal contains:");
System.out.println("Main Course: " + mainCourse);
System.out.println("Drink: " + drink);
System.out.println("Dessert: " + dessert);
}
}
复制
代码
2. 界说抽象制作者
// 抽象建造者
public abstract class MealBuilder {
protected Meal meal = new Meal();
public abstract void buildMainCourse();
public abstract void buildDrink();
public abstract void buildDessert();
// 返回构建好的产品
public Meal getMeal() {
return meal;
}
}
复制
代码
3. 界说详细制作者
// 具体建造者:素食套餐
public class VegMealBuilder extends MealBuilder {
@Override
public void buildMainCourse() {
meal.setMainCourse("Vegetable Curry");
}
@Override
public void buildDrink() {
meal.setDrink("Lemonade");
}
@Override
public void buildDessert() {
meal.setDessert("Fruit Salad");
}
}
// 具体建造者:非素食套餐
public class NonVegMealBuilder extends MealBuilder {
@Override
public void buildMainCourse() {
meal.setMainCourse("Chicken Curry");
}
@Override
public void buildDrink() {
meal.setDrink("Coke");
}
@Override
public void buildDessert() {
meal.setDessert("Ice Cream");
}
}
复制代码
4. 界说指挥者
// 指挥者
public class MealDirector {
private MealBuilder builder;
public MealDirector(MealBuilder builder) {
this.builder = builder;
}
public Meal constructMeal() {
builder.buildMainCourse();
builder.buildDrink();
builder.buildDessert();
return builder.getMeal();
}
}
复制代码
5. 客户端代码
public class BuilderPatternExample {
public static void main(String[] args) {
// 构建素食套餐
MealBuilder vegMealBuilder = new VegMealBuilder();
MealDirector vegDirector = new MealDirector(vegMealBuilder);
Meal vegMeal = vegDirector.constructMeal();
System.out.println("Veg Meal:");
vegMeal.showItems();
System.out.println("----------------------");
// 构建非素食套餐
MealBuilder nonVegMealBuilder = new NonVegMealBuilder();
MealDirector nonVegDirector = new MealDirector(nonVegMealBuilder);
Meal nonVegMeal = nonVegDirector.constructMeal();
System.out.println("Non-Veg Meal:");
nonVegMeal.showItems();
}
}
复制代码
输出结果
Veg Meal:
Meal contains:
Main Course: Vegetable Curry
Drink: Lemonade
Dessert: Fruit Salad
----------------------
Non-Veg Meal:
Meal contains:
Main Course: Chicken Curry
Drink: Coke
Dessert: Ice Cream
复制代码
UML 类图
+----------------+
| Meal |
+----------------+
| - mainCourse |
| - drink |
| - dessert |
+----------------+
| + setXXX() |
| + showItems() |
+----------------+
^
|
+----------------+
| MealBuilder |
+----------------+
| + buildXXX() |
| + getMeal() |
+----------------+
/ \
+---------------+ +-----------------+
| VegMealBuilder| | NonVegMealBuilder|
+---------------+ +-----------------+
^
|
+----------------+
| MealDirector |
+----------------+
| - builder |
| + constructMeal|
+----------------+
复制代码
实用场景
复杂对象的创建
:对象包罗多个构成部分,且构建次序不可或缺。
构造过程稳固,表现多样
:同一构造流程可用于创建差别表现的对象。
代码清晰
:通太过离构造过程简化了客户端逻辑。
小结
制作者模式
得当构建复杂对象并关注构建过程的场景。
它将产物的创建与表现分离,进步了机动性和扩展性。
缺点
:当产物构造步调或范例较少时,使用该模式大概显得冗余。
回复
使用道具
举报
返回列表
浏览过的版块
分布式数据库
数据仓库与分析
人工智能
SQL-Server
云原生
linux
前端开发
后端开发
SAAS
千千梦丶琪
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表