Skip to content

Commit

Permalink
chore: update singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
kelein committed Jan 19, 2024
1 parent e25cafd commit 46bda31
Showing 1 changed file with 24 additions and 16 deletions.
40 changes: 24 additions & 16 deletions insight-patterns/singleton/shoppingcart.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,40 @@ import (
"sync"
)

var (
once sync.Once
intraCart *ShoppingCart
)
var once sync.Once

var intraCartManager *ShoppingCartManager

// ShoppingCart for shopping
type ShoppingCart struct {
products map[string]int
// ShoppingCartManager for shopping
type ShoppingCartManager struct {
cart map[string]int
keys []string
mutex sync.Mutex
}

// GetShoppingCart return a global shopping cart
func GetShoppingCart() *ShoppingCart {
// GetShoppingCartManager return a global shopping cart
func GetShoppingCartManager() *ShoppingCartManager {
once.Do(func() {
intraCart = &ShoppingCart{products: make(map[string]int)}
intraCartManager = &ShoppingCartManager{
cart: make(map[string]int),
}
})
return intraCart
return intraCartManager
}

// AddProduct adds a product into the shopping cart
func (cart *ShoppingCart) AddProduct(name string, quantity int) {
cart.products[name] += quantity
func (m *ShoppingCartManager) AddProduct(name string, quantity int) {
m.mutex.Lock()
defer m.mutex.Unlock()
m.cart[name] += quantity
if _, ok := m.cart[name]; !ok {
m.keys = append(m.keys, name)
}
}

// ShowProduct show all products in the shopping cart
func (cart *ShoppingCart) ShowProduct() {
for name, quantity := range cart.products {
slog.Info("product", "name", name, "quantity", quantity)
func (m *ShoppingCartManager) ShowProduct() {
for _, item := range m.keys {
slog.Info("product", "name", item, "quantity", m.cart[item])
}
}

0 comments on commit 46bda31

Please sign in to comment.