go语言设计模式之builder
2024-09-01 23:50:38
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) } }
最新文章
- HDU 2087 字符串
- Scala包
- 作业2源程序版本管理软件优缺点,及Github注册
- 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台获取当前栏目和顶级栏目
- 将n行3列的数据dataTable装换成m行7列的dataTable
- 实现从sql server存取二进制图片
- css 等高补偿法
- 简要介绍EF(实体框架)
- [LeetCode141]Linked List Cycle
- 在实现从excel中读取数据作为接口参数遇到的问题
- 使用Python Shapefile Library创建和编辑Shapefile文件
- 每日冲刺报告--Day2
- vue---slot,slot-scoped,以及2.6版本之后插槽的用法
- hashlib模块(加密模块)
- java垃圾回收机制GC
- 在vue中使用highcharts的仪表图等扩展
- react better-scroll 编写类似手机chrome的header显示隐藏效果
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
- Spring P命名空间 02
- POJ 1904 King's Quest(强连通图)题解
热门文章
- springboot~maven集成开发里的docker构建
- C#调试程序——断点+几种观察数据的方法
- Spring基础——AOP通知
- English:Day-to-day 1104
- 分析Android APK-反编译修改打包
- 使用 Anydesk 5.1 TCP 通道(端口映射)功能从外网方便访问内网的 web/数据库等资源
- 023.[转] 尚硅谷_Maven笔记
- VMware安装Linux提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
- Eclipse中如何添加相对路径的外部jar包
- docx和doc的区别