Golang设计模式(工厂模式)

栏目: Go · 发布时间: 6年前

内容简介:factory.gofactory_test.go程序输出如下,

factory.go

// factory
package factory

import (
    "errors"
    "fmt"
)

const (
    Cash      = 1
    DebitCard = 2
)

type PaymentMethod interface {
    Pay(amount float32) string
}

func GetPaymentMethod(m int) (PaymentMethod, error) {
    switch m {
    case Cash:
        return new(CashPM), nil
    case DebitCard:
        return new(DebitCardPM), nil
    default:
        return nil, errors.New(fmt.Sprintf("Payment method %d not recognized!", m))
    }
}

type CashPM struct{}
type DebitCardPM struct{}

func (c *CashPM) Pay(amount float32) string {
    return fmt.Sprintf("%0.2f paid using cash", amount)
}

func (c *DebitCardPM) Pay(amount float32) string {
    return fmt.Sprintf("%#0.2f paid using debit card", amount)
}

factory_test.go

// factorymethod
package factory

import (
    "strings"
    "testing"
)

func TestGetPaymentMethodCash(t *testing.T) {
    payment, err := GetPaymentMethod(Cash)
    if err != nil {
        t.Fatal("A payment method of type 'Cash' must exist")
    }

    msg := payment.Pay(10.30)
    if !strings.Contains(msg, "paid using cash") {
        t.Error("The cash payment method message doesn't correct")
    }

    t.Log("Log:", msg)
}

func TestGetPaymentMethodDebitCard(t *testing.T) {
    payment, err := GetPaymentMethod(DebitCard)
    if err != nil {
        t.Fatal("A payment method of type 'DebitCard' must exist")
    }
    msg := payment.Pay(22.30)

    if !strings.Contains(msg, "paid using debit card") {
        t.Error("The debit card payment method message doesn't correct")
    }
    t.Log("Log:", msg)
}

程序输出如下,

Golang设计模式(工厂模式)

image.png


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

查看所有标签

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

微创新

微创新

德鲁•博迪、雅各布•戈登堡 / 钟莉婷 / 中信出版社 / 2014-4-5 / 42.00

好产品不一定要颠覆,微小改进就能让用户尖叫! 引爆创新领域的全新方法论 互联网时代行之有效的5大创新策略 创业者、产品经理必读的创新行动指南 《怪诞行为学》作者 丹•艾瑞里 《影响力》作者 罗伯特•西奥迪尼 全球50位最具影响力的商业思想家之一丹尼尔•平克 周鸿祎、黎万强、罗振宇、牛文文、张鹏 联袂重磅推荐 为什么iPod可以在众多mp3产品中......一起来看看 《微创新》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

html转js在线工具