commit
4037ea75d0
@ -0,0 +1,2 @@
|
||||
.idea/
|
||||
.DS_Store
|
@ -0,0 +1,15 @@
|
||||
package factory
|
||||
|
||||
func CreateCashAccept(t int) Casher {
|
||||
var cash Casher
|
||||
switch t {
|
||||
case 1: //正常
|
||||
cash = new(CashNormal)
|
||||
case 2: //8折
|
||||
cash = &CashRebate{moneyRebate: 0.8}
|
||||
case 3: //满300减50
|
||||
cash = &CashReturn{moneyCondition: 300, moneyReturn: 50}
|
||||
default:
|
||||
}
|
||||
return cash
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package factory
|
||||
|
||||
type CashNormal struct{}
|
||||
|
||||
func (c *CashNormal) AcceptCash(money float64) float64 {
|
||||
return money
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package factory
|
||||
|
||||
// CashRebate
|
||||
// @Description: 打折收费
|
||||
type CashRebate struct {
|
||||
moneyRebate float64
|
||||
}
|
||||
|
||||
func (c *CashRebate) AcceptCash(money float64) float64 {
|
||||
return money * c.moneyRebate
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package factory
|
||||
|
||||
import "math"
|
||||
|
||||
// CashReturn
|
||||
// @Description: 返利收费
|
||||
type CashReturn struct {
|
||||
moneyCondition float64
|
||||
moneyReturn float64
|
||||
}
|
||||
|
||||
func (c *CashReturn) AcceptCash(money float64) float64 {
|
||||
ret := money
|
||||
if money >= c.moneyCondition {
|
||||
ret = money - math.Floor(money/c.moneyCondition)*c.moneyReturn
|
||||
}
|
||||
return ret
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package factory
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestCashNormal_AcceptCash(t *testing.T) {
|
||||
accept := CreateCashAccept(1)
|
||||
if accept == nil {
|
||||
t.Error("testing failed")
|
||||
}
|
||||
money := 300.0
|
||||
ret := accept.AcceptCash(money)
|
||||
t.Log("\t应付: ", money)
|
||||
t.Log("\t实付: ", ret)
|
||||
}
|
||||
|
||||
func TestCashRebate_AcceptCash(t *testing.T) {
|
||||
accept := CreateCashAccept(2)
|
||||
if accept == nil {
|
||||
t.Error("testing failed")
|
||||
}
|
||||
money := 300.0
|
||||
ret := accept.AcceptCash(money)
|
||||
t.Log("\t应付: ", money)
|
||||
t.Log("\t实付: ", ret)
|
||||
}
|
||||
|
||||
func TestCashReturn_AcceptCash(t *testing.T) {
|
||||
accept := CreateCashAccept(3)
|
||||
if accept == nil {
|
||||
t.Error("testing failed")
|
||||
}
|
||||
money := 300.0
|
||||
ret := accept.AcceptCash(money)
|
||||
t.Log("\t应付: ", money)
|
||||
t.Log("\t实付: ", ret)
|
||||
}
|
||||
|
||||
func TestCash(t *testing.T) {
|
||||
accept := CreateCashAccept(4)
|
||||
if accept == nil {
|
||||
t.Fatal("testing failed")
|
||||
}
|
||||
money := 300.0
|
||||
ret := accept.AcceptCash(money)
|
||||
t.Log("\t应付: ", money)
|
||||
t.Log("\t实付: ", ret)
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package factory
|
||||
|
||||
type Casher interface {
|
||||
AcceptCash(money float64) float64
|
||||
}
|
Loading…
Reference in new issue