内容简介: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)
}
程序输出如下,
image.png
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mathematica Cookbook
Sal Mangano / O'Reilly Media / 2009 / GBP 51.99
As the leading software application for symbolic mathematics, Mathematica is standard in many environments that rely on math, such as science, engineering, financial analysis, software development, an......一起来看看 《Mathematica Cookbook》 这本书的介绍吧!