设计模式之建造者模式
2021/7/8 23:06:07
本文主要是介绍设计模式之建造者模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
建造者模式定义
建造者模式是一种创建型设计模式(有的也称之为生成器模式), 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。
建造者模式结构
- 建造者/生成器(Builder):清晰的定义通用步骤,确保它们可以制造所有形式的产品。 否则你将无法进一步实施该模式。
- 具体建造者(ConcreteBuilder):每个形式的产品创建具体生成器类, 并实现其构造步骤。
- 指挥者(Director):它可以使用同一生成器对象来封装多种构造产品的方式。
建造者模式实现
场景:盖房子,房子都有房顶、四面墙壁、窗户和门,可以使用不同的材料,例如,第一个建造者使用木头和玻璃,第二个建造者使用石头和钢铁。在调用一组步骤后,第一个建造者得到的是一栋普通房屋,第二栋得到的是一栋城堡
使用代码简单实现一下:
声明创建房屋通用步骤的接口
public interface IHouseBuilder { void buildWall(); void buildRoof(); void buildWindow(); void buildDoor(); void buildResult(); }
创建具体建造者,继承接口并实现
public class House : IHouseBuilder { public void buildDoor() { Console.WriteLine("装房门"); } public void buildResult() { Console.WriteLine("普通木屋"); } public void buildRoof() { Console.WriteLine("盖房顶"); } public void buildWall() { Console.WriteLine("盖墙壁"); } public void buildWindow() { Console.WriteLine("安装窗户"); } }
创建指挥者,用于构建和组织步骤
public class HouseDirector { public void Construct(IHouseBuilder houseBuilder) { houseBuilder.buildWall(); houseBuilder.buildWall(); houseBuilder.buildWindow(); houseBuilder.buildDoor(); } }
客户端调用
static void Main(string[] args) { HouseDirector houseDirector = new HouseDirector(); Console.WriteLine("------------------盖一栋普通木屋------------------"); IHouseBuilder houseBuilder1 = new House(); houseDirector.Construct(houseBuilder1); houseBuilder1.buildResult(); Console.WriteLine("------------------盖一栋城堡------------------"); IHouseBuilder houseBuilder2 = new Tower(); houseDirector.Construct(houseBuilder2); houseBuilder2.buildResult(); Console.WriteLine("Press Any Key to end!"); Console.ReadKey(); }
输出结果
建造者模式优缺点
优点
- 可以分步创建对象, 暂缓创建步骤或递归运行创建步骤。
- 生成不同形式的产品时, 你可以复用相同的制造代码。
- 单一职责原则。 你可以将复杂构造代码从产品的业务逻辑中分离出来。
缺点
- 由于该模式需要新增多个类, 因此代码整体复杂程度会有所增加。
建造者模式使用场景
- 当你希望使用代码创建不同形式的产品(例如石头或木头房屋)时,可使用生成器模式
- 使用生成器构造组合树或其他复杂对象。
示例源代码
源代码仓库地址:https://github.com/luchong0813/DesignModel
这篇关于设计模式之建造者模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求