设计模式:简单工厂模式

栏目: 后端 · 发布时间: 6年前

内容简介:这个系列是《大话设计模式》的读后感,将书中的设计模式用golang实现。第一个设计模式是简单工厂模式,主要用到的知识点是类的多态表示不同的类可以执行相同的方法,但要通过它们自己的实现代码来执行。

这个系列是《大话设计模式》的读后感,将书中的 设计模式 用golang实现。

第一个设计模式是简单工厂模式,主要用到的知识点是类的 多态

多态表示不同的类可以执行相同的方法,但要通过它们自己的实现代码来执行。

而在golang中没有类的概念,我们可以借助接口(interface)类型实现类的多态。

如果一个类型实现了接口的所有方法,那么就可以说这个类型实现了这个接口。

我们要实现两个数字的加减乘除操作作为示例

package simplefactory

import "fmt"

// 1. 定义一个接口类型,子类必须实现GoResult方法来实现该接口
type Operation interface {
	GetResult(a float64, b float64) (float64, error)
}

// 2. 初始化工厂类方法,传入操作符,返回对应的类
func NewOperation(operstring)Operation {
	switch oper {
	case "+":
		return &operationAdd{}
	case "-":
		return &operationSub{}
	case "*":
		return &operationMul{}
	case "/":
		return &operationDiv{}
	default:
		return nil
	}
}

// 加法
type operationAdd struct{}

func (o *operationAdd)GetResult(afloat64, bfloat64)(float64, error) {
	return a + b, nil
}

// 减法
type operationSub struct{}

func (o *operationSub)GetResult(afloat64, bfloat64)(float64, error) {
	return a - b, nil
}

// 乘法
type operationMul struct{}

func (o *operationMul)GetResult(afloat64, bfloat64)(float64, error) {
	return a * b, nil
}

// 除法
type operationDiv struct{}

func (o *operationDiv)GetResult(afloat64, bfloat64)(float64, error) {
	if b == 0 {
		return 0, fmt.Errorf("除数不能为0")
	}

	return a / b, nil
}

源码以及测试源码下载地址: https://github.com/h1z3y3/big-talk-go-design-patterns/tree/master/00_simple_factory


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ordering Disorder

Ordering Disorder

Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99

The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具