设计模式:简单工厂模式

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

内容简介:这个系列是《大话设计模式》的读后感,将书中的设计模式用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


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

查看所有标签

猜你喜欢:

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

疯狂的站长

疯狂的站长

温世豪 / 清华大学出版社 / 2010年05月 / 29.00元

受全球性金融危机的影响,就业变得越来越困难,众多青年,包括大学毕业生,无不感到就业的巨大压力,站长这一职业不但创业门槛低,而且还自由自在。其实,搭建一个网站是相当简单的,但要成为一名成功的站长则不那么容易。 本书作者是一名站长,从事互联网相关工作已十余年,自已也在经营一个知名网站,积累了大量网站运营经验。作者结合自身真实的“疯狂”创业经历,以平实、通俗的语言讲述如何从零开始起步,最终成为一名......一起来看看 《疯狂的站长》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

html转js在线工具
html转js在线工具

html转js在线工具

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

正则表达式在线测试