登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
设计模式(四)建造者
设计模式(四)建造者
[ 复制链接 ]
驼娑
2025-6-9 00:13:13
一、定义
讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种创建型模式。
二、描述
包含以下四个角色:
1、Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法:一类是BuildPartX(),用于创建复杂对象的各个部件;另一类是GetResult(),用于返回生成好的复杂对象。Builder既可以是抽象类,也可以是接口。
2、ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确其所创建的复杂对象,还可以提供一个方法返回创建好的复杂产品(该方法也可以由抽象建造者实现)。
3、Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
4、Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其Construct()方法中调用建造者对象的部件构造和装配方法,完成复杂对象的建造。客户端一般只需要和指挥者进行交互,在客户端确定具体建造者类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥类中。
三、例子
X公司要开发一款角色类游戏,角色根据不同情境具有不同能力,并且随着升级增强。角色是个复杂的对象,不同角色其性别、面容、服装、发型等都有所差异。无论何种角色,创建步骤都大同小异,都需要分步骤创建组成部分,再装配成一个完整的角色。
Actor:角色类复杂产品,实际业务较为复杂,示例简化只列出部分属性且类型为string
public class Actor
{
//角色类型
public string Type { get; set; }
//性别
public string Sex { get; set; }
//面容
public string Face { get; set; }
//服装
public string Costume { get; set; }
//发型
public string HairStyle { get; set; }
}
复制代码
ActorBuilder:游戏角色建造器,充当抽象建造者
public abstract class ActorBuilder
{
protected Actor actor = new Actor();
public abstract void BuildType();
public abstract void BuildSex();
public abstract void BuildFace();
public abstract void BuildCostume();
public abstract void BuildHairStyle();
// 工厂方法 : 返回一个完整的游戏角色对象
public Actor CreateActor()
{
return actor;
}
}
复制代码
HeroBuilder、AngelBuilder和DevilBuilder:英雄角色、天使角色、魔鬼角色,充当具体建造者。
public class HeroBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "英雄";
}
public override void BuildSex()
{
actor.Sex = "男";
}
public override void BuildFace()
{
actor.Face = "英俊";
}
public override void BuildCostume()
{
actor.Costume = "盔甲";
}
public override void BuildHairStyle()
{
actor.HairStyle = "飘逸";
}
}
public class AngelBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "天使";
}
public override void BuildSex()
{
actor.Sex = "女";
}
public override void BuildFace()
{
actor.Face = "漂亮";
}
public override void BuildCostume()
{
actor.Costume = "白裙";
}
public override void BuildHairStyle()
{
actor.HairStyle = "披肩长发";
}
}
public class DevilBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "恶魔";
}
public override void BuildSex()
{
actor.Sex = "妖";
}
public override void BuildFace()
{
actor.Face = "丑陋";
}
public override void BuildCostume()
{
actor.Costume = "黑衣";
}
public override void BuildHairStyle()
{
actor.HairStyle = "光头";
}
}
复制代码
ActorController:角色控制器,充当指挥者
public class ActorController
{
public Actor Construct(ActorBuilder builder)
{
builder.BuildType();
builder.BuildSex();
builder.BuildFace();
builder.BuildCostume();
builder.BuildHairStyle();
return builder.CreateActor(); ;
}
}
复制代码
Program:测试代码
ActorBuilder ab = new HeroBuilder();
ActorController ac = new ActorController();
Actor at = ac.Construct(ab);
Console.WriteLine(at.Type);
Console.WriteLine(at.Sex);
Console.WriteLine(at.Face);
Console.WriteLine(at.Costume);
Console.WriteLine(at.HairStyle);
Console.ReadLine();
复制代码
四、总结
1、优点
(1)在建造者模式中,客户端不必知道产品内部的组成细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
(2)没一个具体建造者都相对独立,与其他的具体建造者无关,因此新增与替换具体建造者很方便,由于指挥者类针对抽象建造者编程,增加新的具体建造者无需修改原有类库的代码,系统扩展比较方便,符合开闭原则
(3)用户可以更加精细地控制产品的创建过程,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程
2、缺点
(1)建造者模式所创建产的品都具有一些较多的共同点,其组成部分相似,如果差异性很大,例如很多组成部分不同,那么则不适合使用建造者模式。
(2)如果产品的内部结构复杂多变,可能会需要定义很多具体构建者来实现这些变化,导致系统变得很庞大,增加了系统的理解难度和运行成本
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
设计模式
建造者
相关帖子
设计模式之迭代器模式
设计模式——六大原则
设计模式:简单工厂、工厂方法与抽象工厂
【Java】23种设计模式——14.模板方法模式
【设计模式】单例模式
【设计模式】工厂模式
【设计模式】外观模式
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
没听说过设计模式?保姆级教程来了!
设计模式之单例模式
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
设计模式之迭代器模式
0
167
幌斛者
2025-06-09
业界
设计模式——六大原则
0
383
嗅叽
2025-06-09
业界
设计模式:简单工厂、工厂方法与抽象工厂
0
833
挫莉虻
2025-06-20
安全
【Java】23种设计模式——14.模板方法模式
0
147
郁梓馨
2025-06-20
业界
【设计模式】单例模式
0
377
嘀荼酴
2025-06-26
安全
【设计模式】工厂模式
0
283
恙髡
2025-06-26
业界
【设计模式】外观模式
0
163
盒礁泅
2025-06-27
业界
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
0
882
匣卒
2025-07-08
安全
没听说过设计模式?保姆级教程来了!
0
413
涣爹卮
2025-07-09
安全
设计模式之单例模式
0
77
颖顿庐
2025-09-03
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
驼娑
2025-6-9 00:13:13
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多