go语言设计模式之builder
builder.go
package builder type BuildProcess interface { SetWheels() BuildProcess SetSeats() BuildProcess SetStructure() BuildProcess GetVehicle() VehicleProduct } type ManufacturingDirector struct { builder BuildProcess } func (f *ManufacturingDirector) Construct() { //Implementation goes here f.builder.SetSeats().SetStructure().SetWheels() } func (f *ManufacturingDirector) SetBuilder(b BuildProcess) { //Implementation goes here f.builder = b } type VehicleProduct struct { Wheels int Seats int Structure string } type CarBuilder struct { v VehicleProduct } func (c *CarBuilder) SetWheels() BuildProcess { c.v.Wheels = 4 return c } func (c *CarBuilder) SetSeats() BuildProcess { c.v.Seats = 5 return c } func (c *CarBuilder) SetStructure() BuildProcess { c.v.Structure = "Car" return c } func (c *CarBuilder) GetVehicle() VehicleProduct { return c.v } type BikeBuilder struct { v VehicleProduct } func (b *BikeBuilder) SetWheels() BuildProcess { b.v.Wheels = 2 return b } func (b *BikeBuilder) SetSeats() BuildProcess { b.v.Seats = 2 return b } func (b *BikeBuilder) SetStructure() BuildProcess { b.v.Structure = "Motorbike" return b } func (b *BikeBuilder) GetVehicle() VehicleProduct { return b.v }
builder_test.go
package builder import "testing" func TestBuilderPattern(t *testing.T) { manufacturingComplex := ManufacturingDirector{} carBuilder := &CarBuilder{} manufacturingComplex.SetBuilder(carBuilder) manufacturingComplex.Construct() car := carBuilder.GetVehicle() if car.Wheels != 4 { t.Errorf("Wheels on a car must be 4 and they were %d\n", car.Wheels) } if car.Structure != "Car" { t.Errorf("Structure on a car must be 'Car' and was %s\n", car.Structure) } if car.Seats != 5 { t.Errorf("Seats on a car must be 4 and they were %d\n", car.Seats) } bikeBuiler := &BikeBuilder{} manufacturingComplex.SetBuilder(bikeBuiler) manufacturingComplex.Construct() motorbike := bikeBuiler.GetVehicle() motorbike.Seats = 1 if motorbike.Wheels != 2 { t.Errorf("Wheels on a motobike must be 2 and they were %d\n", motorbike.Wheels) } if motorbike.Structure != "Motorbike" { t.Errorf("Structure on a motobike must be 'Motorbike' and was %s\n", motorbike.Structure) } }
go语言设计模式之builder的更多相关文章
- 设计模式:Builder模式
设计模式:Builder模式 一.前言 今天我们讨论一下Builder建造者模式,这个Builder,其实和模板模式非常的像,但是也有区别,那就是在模板模式中父类对子类中的实现进行操作,在父类之 ...
- Java设计模式之builder模式
Java设计模式之builder模式 今天学mybatis的时候,知道了SQLSessionFactory使用的是builder模式来生成的.再次整理一下什么是builder模式以及应用场景. 1. ...
- Go语言设计模式之函数式选项模式
Go语言设计模式之函数式选项模式 本文主要介绍了Go语言中函数式选项模式及该设计模式在实际编程中的应用. 为什么需要函数式选项模式? 最近看go-micro/options.go源码的时候,发现了一段 ...
- Go语言设计模式汇总
目录 设计模式背景和起源 设计模式是什么 Go语言模式分类 个人观点 Go语言从面世就受到了业界的普遍关注,随着区块链的火热Go语言的地位也急速蹿升,为了让读者对设计模式在Go语言中有一个初步的了解和 ...
- 设计模式--建造者(Builder)模式
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示 --<设计模 ...
- [学习笔记]设计模式之Builder
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 作为一个新入职的魔导士呢,哦不,是程序员,我以为并没有太多机会去设计项目的软件架构.但是,工作一段时间之后,自己渐渐意识到,哪怕是自己 ...
- C语言设计模式-封装-继承-多态
快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...
- 设计模式学习--Builder
What Builder:将一个复杂的对象的构建和表示分离,使得同样的构建过程可以创建不同的表示. Why Builder也是创建型模式的一种,它是一步一步的向导式的创建一个复杂的对象,Builder ...
- Java设计模式-建造者(Builder)模式
目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码 ...
随机推荐
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...
- springboot(二):bootstrap和application有什么区别?
“SpringBoot专注于快速方便的开发单个个体微服务. SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来, 为各个服务之间提供 ...
- springboot + springcloud +nacos实战
首先从整个软件的功能和应用场景来说,nacos更像consul,而非eureka,nacos设计的时候自带的配置中心功能,让我们省下了去搞springcloud config的时间,但这里并不是说na ...
- How to: Generate XPO Business Classes for Existing Data Tables 如何:为现有数据表生成 XPO 业务类
From the Tutorial and other documentation sources, you learned how to create business classes for yo ...
- How to: Implement a Custom Base Persistent Class 如何:实现自定义持久化基类
XAF ships with the Business Class Library that contains a number of persistent classes ready for use ...
- CSS基础属性介绍
css属性分类介绍 css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 ...
- 一个diango项目的结构
一个项目的结构 day43项目 .idea 配置 pycharm自动帮配的配置,打开别人的diango项目时要先删了此项 app01 方便在一个大的Django项目中,管理实现不同的业务功能 migr ...
- Centos8尝鲜
Centos 8阿里云下载地址https://mirrors.aliyun.com/centos/8.0.1905/isos/x86_64/ Centos8的一些变化 网络服务: 在/etc/sysc ...
- windows命令行pip报错解决的方法
今天在新电脑安装python,发现pip无效了,于是乎百度了很多方法,发现原因是pip升级导致的 解决办法,卸载pip重新安装 可以首先执行 python -m ensurepip 然后执行 py ...
- [洛谷P1373][题解]小a和uim之大逃离
(别点我我不是题目) 这道题可以很容易看出是一道dp(因为是在dp关卡里找的) 稍微想一下就可以yy出一个不错的状态: f[i][j][k][0/1]代表走到了点(i,j).膜液量相差k(小a-uim ...