command pattern error fix
This commit is contained in:
parent
28814bb7a3
commit
02323f814f
64
behavioral/command/command.go
Normal file
64
behavioral/command/command.go
Normal file
@ -0,0 +1,64 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Order interface {
|
||||
execute()
|
||||
}
|
||||
|
||||
type Stock struct {
|
||||
name string
|
||||
count int
|
||||
}
|
||||
func (s *Stock) Buy() {
|
||||
fmt.Println("Bought new item.")
|
||||
s.count += 1
|
||||
}
|
||||
func (s *Stock) Sell() {
|
||||
fmt.Println("Sold one item.")
|
||||
s.count -= 1
|
||||
}
|
||||
|
||||
type BuyStock struct {
|
||||
stock Stock
|
||||
}
|
||||
func (b *BuyStock) execute() {
|
||||
b.stock.Buy()
|
||||
}
|
||||
|
||||
type SellStock struct {
|
||||
stock Stock
|
||||
}
|
||||
func (b *SellStock) execute() {
|
||||
b.stock.Sell()
|
||||
}
|
||||
|
||||
type Broker struct {
|
||||
orders []Order
|
||||
}
|
||||
func (b *Broker) TakeOrder(o Order) {
|
||||
b.orders = append(b.orders, o)
|
||||
}
|
||||
func (b *Broker) PlaceOrders() {
|
||||
for _,v := range b.orders {
|
||||
v.execute()
|
||||
}
|
||||
|
||||
b.orders = make([]Order, 0)
|
||||
}
|
||||
|
||||
func Demo() {
|
||||
stock := Stock{name:"phone", count:2}
|
||||
buyStck := &BuyStock{stock}
|
||||
sellStck := &SellStock{stock}
|
||||
broker := &Broker{}
|
||||
broker.orders = make([]Order, 0)
|
||||
|
||||
broker.TakeOrder(buyStck)
|
||||
broker.TakeOrder(sellStck)
|
||||
|
||||
broker.PlaceOrders()
|
||||
|
||||
}
|
Reference in New Issue
Block a user