博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习笔记-建造者模式
阅读量:6225 次
发布时间:2019-06-21

本文共 2161 字,大约阅读时间需要 7 分钟。

一、概述

      将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;

二、模式中的角色

      Builder:为创建一个Product对象的各个部件指定抽象接口;

      ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件;定义并明确它所创建的表示;提供一个检索产品的接口;

      Director:构造一个使用Builder接口的对象;

      Product:表示被构造的复杂对象,ConcreteBuilder创建该产品的内部表示并定义它的装配过程;包含定义组成部件的类,包括将这些部件装配成最终产品的接口;

三、UML类图

 

四、代码实现

///     /// 产品类    ///     public class Product    {        List
parts = new List
(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("\n 产品创建------"); foreach (var item in parts) { Console.WriteLine(item); } } } ///
/// 抽象建造者类 /// public abstract class Builder { public abstract void BuilderPart1(); public abstract void BuilderPart2(); public abstract Product GetResult(); } ///
/// 具体建造者类 /// public class ConcreteBuilder : Builder { private Product product = new Product(); ///
/// 部件1 /// public override void BuilderPart1() { product.Add("部件1"); } ///
/// 部件2 /// public override void BuilderPart2() { product.Add("部件2"); } ///
/// 输出结果 /// ///
public override Product GetResult() { return product; } } ///
/// 指挥者类 /// public class Director { ///
/// 用来指挥建造过程 /// ///
public void Construct(Builder builder) { builder.BuilderPart1(); builder.BuilderPart2(); } } #region 建造者模式 Director director = new Director(); Builder builder1 = new ConcreteBuilder(); director.Construct(builder1); Product product1 = builder1.GetResult(); product1.Show(); #endregion

5、应用场景

     5.1:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的转配方式时;

     5.2:当构造过程必须允许被构造的对象有不同的表示时;

 

参考书籍《设计模式-可复用面向对象软件的基础》

 

转载于:https://www.cnblogs.com/ricky-wang/p/6666922.html

你可能感兴趣的文章
2017-08-30 前端日报
查看>>
在金融APP做自动化这条路上,我们填过哪些坑?
查看>>
用微信小程序连接WordPress网站
查看>>
分析一次ORACLE数据库Session暴增的问题
查看>>
ORACLE查询临时表空间使用率一直是100%的原因
查看>>
mongo同库联表查询
查看>>
关于Mac 下 Charles的使用 以及碰到无法抓包的问题
查看>>
7月份前端资源分享
查看>>
搜狗手机助手联合腾讯御安全 共建APP安全生态环境
查看>>
Codeigniter 4.0-dev 版源码学习笔记之五——相对于 3.x 的变化
查看>>
一条命令配置好ssh免密登录
查看>>
(译 & 转载) 2016 JavaScript 后起之秀
查看>>
代码迭代的几种方式
查看>>
GB(一)
查看>>
Gitter:高颜值GitHub小程序客户端诞生记
查看>>
Swift 烧脑体操(二) - 函数的参数
查看>>
V8十年故事:从农场诞生的星球最强JS引擎
查看>>
微服务网关Kong 1.0正式发布!提供100+项功能
查看>>
《The Startup Way》作者访谈
查看>>
慎用!BLEU评价NLP文本输出质量存在严重问题
查看>>