文档章节

大话设计模式(Golang) 一、简单工厂模式

平凡之路
 平凡之路
发布于 2016/07/11 21:02
字数 216
阅读 98
收藏 0

模式特点:工厂类根据条件产生不同功能的运算类对象,客户端不需要知道具体的运算类。
程序实例:四则运算计算器,根据用户的输入产生相应的运算类,用这个运算类处理具体的运算。

package main

import (
	"fmt"
)

type Operation struct {
	a float64
	b float64
}

func (this *Operation) Init(a float64, b float64) {
	this.a = a
	this.b = b
}

type Operator interface {
	GetResult() float64
	Init(a float64, b float64)
}

type Add struct {
	Operation
}

func (this *Add) GetResult() float64 {
	return this.a + this.b
}

type Sub struct {
	Operation
}

func (this *Sub) GetResult() float64 {
	return this.a - this.b
}

type Mul struct {
	Operation
}

func (this *Mul) GetResult() float64 {
	return this.a * this.b
}

type Div struct {
	Operation
}

func (this *Div) GetResult() float64 {
	return this.a / this.b
}

type OperationFactory struct {
}

func (this *OperationFactory) CreateOperator(oper byte) (operator Operator) {

	switch oper {
	case '+':
		operator = &Add{}
	case '-':
		operator = &Sub{}
	case '*':
		operator = &Mul{}
	case '/':
		operator = &Div{}
	default:
		panic("运算符号错误!")
	}
	return
}

func main() {
	f := &OperationFactory{}
	add := f.CreateOperator('+')
	add.Init(1, 2)
	fmt.Println(add.GetResult())
}

 

© 著作权归作者所有

平凡之路
粉丝 42
博文 54
码字总数 14528
作品 0
海淀
架构师
私信 提问
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
设计模式之工厂模式学习

与简单工厂模式相比,工厂模式为每个类增加了一个工厂类。每个工厂类返回它所对应的类的对象指针。 简单工厂模式的最大优点:工厂类中包含了必要的逻辑判断。根据客户端的选择条件动态的实例...

长平狐
2012/10/08
69
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69

没有更多内容

加载失败,请刷新页面

加载更多

面向对象方面的一些东东

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" cont......

流年那么伤
28分钟前
2
0
git 过滤文件夹和文件(IDEA)

最近使用git版本管理工具遇到一件很烦的事情,commit时总会把.idea、.*.iml和target文件添加进来,实际开发中,这些是需要过滤掉的。在.gitnore文件添加了过滤不起作用。下面介绍一种成功过滤...

uug
35分钟前
2
0
Spark Streaming 实时统计商户当日累计PV流量

一、问题 对实时流量日志过滤筛选商户流量,对每个商户的流量进行累计,统计商户实时累计流量。 当时间超过24时时,重新统计当日商户的实时累计流量。 二、实现步骤 1、采用Spark Streaming...

boonya
40分钟前
2
0
如果Task与Event 创建了记录类型后,不出现在Lightning的Activities中

如果在Lightning的Activities没出现这两个Button,但是在页面布局的Lightning 按钮区也存在,全局操作的记录类型就需要选择一个,否则不会出现

在山的那边
49分钟前
2
0
ddd中的子域和界限上下文

我们先来说说子域是什么?子域在我的理解是在一个庞大的系统中可以明显感知的不同的区块,如果在电商模块中,商品目录,订单,物流,库存,发票等等都可以感知他们明显的不同,可以认为是子域...

算法之名
58分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部