设计模式之建造者模式

一、建造者模式:如果创建某个对象要经过多个组件组装才能完成,我们可以设计一个充当建造者角色的类和一个充当指挥者的类,通过指挥者控制建造者按步骤组装需要创建的对象,这样客户端就只依赖于指挥者类。

二、实现思路 :设计一个建造者类,其中包含要创建对象的所有组件的创建方法,然后再创建一个指挥者,指挥建造者方法执行对象的创建。

三、代码举例:

设计模式之建造者模式

抽象类AbstractBuilder:

csharp;collapse:true;;gutter:true; namespace Builder { public abstract class AbstractBuilder { public abstract void CreateCpu(); public abstract void CreateMainboard(); public abstract void CreateRom(); public abstract void CreateRam(); public abstract void CreateComputer(); } }</p> <pre><code> 实现类AcerBuilder: ;collapse:true;;gutter:true;
namespace Builder
{
public class AcerBuilder : AbstractBuilder
{
public override void CreateComputer()
{
Console.WriteLine("组装成Acer电脑");
}

public override void CreateCpu()
{
Console.WriteLine("创建cpu");
}

public override void CreateMainboard()
{
Console.WriteLine("创建主板");
}

public override void CreateRam()
{
Console.WriteLine("创建Ram内存条");
}

public override void CreateRom()
{
Console.WriteLine("创建Rom硬盘");
}
}
}

实现类DellBuilder:

csharp;collapse:true;;gutter:true; namespace Builder { public class DellBuilder : AbstractBuilder { public override void CreateComputer() { Console.WriteLine("组装成Dell电脑"); } public override void CreateCpu() { Console.WriteLine("创建cpu"); }</p> <pre><code> public override void CreateMainboard() { Console.WriteLine("创建主板"); } public override void CreateRam() { Console.WriteLine("创建Ram内存条"); } public override void CreateRom() { Console.WriteLine("创建Rom硬盘"); } } </code></pre> <p>}</p> <pre><code> 指挥者类Director: ;collapse:true;;gutter:true;
namespace Builder
{
public class Director
{
public AbstractBuilder builder = null;
public Director(AbstractBuilder builder)
{
this.builder = builder;
}
public void GetComputer()
{
Console.WriteLine("正在指挥builder生产电脑…");
this.builder.CreateCpu();
this.builder.CreateMainboard();
this.builder.CreateRam();
this.builder.CreateRom();
Console.WriteLine("builder生产电脑组件完成…");
this.builder.CreateComputer();
Console.WriteLine("电脑组装完成!");
}
}
}

客户类:

csharp;collapse:true;;gutter:true; { //建造者模式中包含2个角色,指挥者和建造者 Builder.AbstractBuilder Acerbuilder = new Builder.AcerBuilder();//充当建造者,建造对象组件 Builder.Director director0 = new Builder.Director(Acerbuilder);//充当指挥者,控制建造者建造过程 director0.GetComputer();//交互产品</p> <pre><code>Builder.AbstractBuilder Dellbuilder = new Builder.DellBuilder();//充当建造者,建造对象组件 Builder.Director director1 = new Builder.Director(Dellbuilder);//充当指挥者,控制建造者建造过程 director1.GetComputer();//交互产品 </code></pre> <p>}

运行结果:

设计模式之建造者模式

四、建造者模式的优缺点及应用:它适用于非常复杂的对象的创建,通常这种复杂的对象具有很多创建步骤,建造者模式关注的不是转移细节,而是关注对象的创建步骤,在指挥者类中不应该包含除了控制建造者执行组件创建逻辑以外额其他逻辑。

Original: https://www.cnblogs.com/zqhIndex/p/10285403.html
Author: 我若安好,便是晴天
Title: 设计模式之建造者模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612900/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 什么是ETCD及其应用场景

    源自公众号:BiggerBoy 一、什么是etcd? etcd 发音为/ˈɛtsiːdiː/,名字的由来,”distributed etc directory.&#82…

    数据库 2023年6月11日
    0118
  • 有趣的BUG之Stack Overflow

    今天遇到一个很有意思的bug,当程序开发完成后打包到服务器运行,总是会出现栈溢出异常,经过排查发现,问题出现在一个接口上,但这个接口逻辑并不复杂,除了几局逻辑代码外和打印语句之外也…

    数据库 2023年6月6日
    089
  • 关于VUE中的mapState和mapActions的使用

    最近在开发一套系统,前端使用VUE开发,由于本人是后端开发,前端也会一点,但是VUE接触不多,在VUE项目开发遇到的一些坑记录一下,不是专业前端写好的不好,大家不要唝。。。 在VU…

    数据库 2023年6月9日
    084
  • 页面静态化

    网站的首页频繁被访问,为了提升访问速度,除了我们之前已经学过的使用缓存技术外,还可以使用页面静态化技术。 页面静态化即将动态渲染生成的页面结果保存成html文件,放到静态文件服务器…

    数据库 2023年6月14日
    081
  • Python环境安装

    一、下载地址: Python:Download Python | Python.org PyCharm:Download PyCharm: Python IDE for Profe…

    数据库 2023年6月14日
    072
  • Word书签替换,加盖电子印章及转换PDF(Java实用版)

    一、前言 在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:…

    数据库 2023年6月16日
    088
  • MySQL 安全管理

    权限表 MySQL 服务器通过权限表来控制用户对数据库的访问,由 mysql_install_db 脚本初始化,MySQL 会根据这些权限表的内容为每个用户赋予相应的权限 user…

    数据库 2023年5月24日
    081
  • SQL Server 2022来了

    SQL Server 2022来了 微软SQL Server依然保持着3年内发布一个大版本的传统,最新版本已经来到SQL Server2022 相关特性双向HA/DR 到Azure…

    数据库 2023年6月9日
    0103
  • 第十七章 AOP编程

    1.AOP概念 AOP(Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的相互协同,相互调…

    数据库 2023年6月14日
    095
  • 使用MySQL,SQL_MODE有哪些坑,你知道么?

    SQL_MODE是MySQL中的一个系统变量(variable),可由多个MODE组成,每个MODE控制一种行为,如是否允许除数为0,日期中是否允许’0000-00-0…

    数据库 2023年6月11日
    084
  • 设计 | ClickHouse 分布式表实现数据同步

    作者:吴帆 青云数据库团队成员主要负责维护 MySQL 及 ClickHouse 产品开发,擅长故障分析,性能优化。 在多副本分布式 ClickHouse 集群中,通常需要使用 D…

    数据库 2023年5月24日
    097
  • Proxy代理模式(结构型)

    一:描述: 为其他对象提供一种代理,来控制对这个对象的访问。如当操作某个对象很复杂时,我们可以建个代理来操作复杂对象,并开放一些简单的接口/方法来让我们比较简单的间接操作,也可在代…

    数据库 2023年6月11日
    089
  • NO.4 计算机组成原理-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    091
  • ubuntu设置时区

    posted @2022-06-21 08:30 一份人间烟火 阅读(2 ) 评论() 编辑 Original: https://www.cnblogs.com/zcxxcvbn/…

    数据库 2023年6月9日
    093
  • 【黄啊码】MySQL入门—6、掌握这些数据筛选技能比你学python还有用-2

    大家好!我是黄啊码,上节课我们将了DISTINCT、 FROM 、 GROUP BY、 HAVING 、 ORDER BY 这些筛选数据的技能,是不是总感觉少了些啥? 你:啊码,你…

    数据库 2023年6月16日
    0113
  • 【转】 一条 SQL 的执行过程详解

    MySQL 体系架构 – 连接池组件 1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 …

    数据库 2023年5月24日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球