From 4dbfec8cec27f1e36a3e1bb8e1206fcf34b65984 Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Fri, 27 Sep 2019 11:28:24 +0300 Subject: [PATCH] update: powerdrawer interface --- interfaces/04-interfaces/power/blender.go | 20 +++++++ interfaces/04-interfaces/power/kettle.go | 20 +++++++ interfaces/04-interfaces/power/main.go | 66 +++++++++-------------- interfaces/04-interfaces/power/mixer.go | 20 +++++++ interfaces/04-interfaces/power/player.go | 20 +++++++ interfaces/04-interfaces/power/socket.go | 38 +++++++++++++ 6 files changed, 144 insertions(+), 40 deletions(-) create mode 100644 interfaces/04-interfaces/power/blender.go create mode 100644 interfaces/04-interfaces/power/kettle.go create mode 100644 interfaces/04-interfaces/power/mixer.go create mode 100644 interfaces/04-interfaces/power/player.go create mode 100644 interfaces/04-interfaces/power/socket.go diff --git a/interfaces/04-interfaces/power/blender.go b/interfaces/04-interfaces/power/blender.go new file mode 100644 index 0000000..9559979 --- /dev/null +++ b/interfaces/04-interfaces/power/blender.go @@ -0,0 +1,20 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" +) + +// Blender can be powered +type Blender struct{} + +// Draw power to a Blender +func (Blender) Draw(power int) { + fmt.Printf("Blender is drawing %dkW of electrical power.\n", power) +} diff --git a/interfaces/04-interfaces/power/kettle.go b/interfaces/04-interfaces/power/kettle.go new file mode 100644 index 0000000..f14443d --- /dev/null +++ b/interfaces/04-interfaces/power/kettle.go @@ -0,0 +1,20 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" +) + +// Kettle can be powered +type Kettle struct{} + +// Draw power to a Kettle +func (Kettle) Draw(power int) { + fmt.Printf("Kettle is drawing %dkW of electrical power.\n", power) +} diff --git a/interfaces/04-interfaces/power/main.go b/interfaces/04-interfaces/power/main.go index a1f9793..8b1aae4 100644 --- a/interfaces/04-interfaces/power/main.go +++ b/interfaces/04-interfaces/power/main.go @@ -13,52 +13,38 @@ import ( "time" ) -// Socket has the power! -type Socket struct { - power int -} - -// Plug a device to draw power from the `Socket` -func (s *Socket) Plug(device PowerDrawer) { - n := rand.Intn(50) - s.power -= n - device.Draw(n) -} - -// PowerDrawer can be any type that can be powered -type PowerDrawer interface { - Draw(power int) -} - -// ----- - -// Kettle can be powered -type Kettle struct{} - -// Draw power to a Kettle -func (Kettle) Draw(power int) { - fmt.Printf("Kettle is drawing %dkW of electrical power.\n", power) -} - -// Mixer can be powered -type Mixer struct{} - -// Draw power to a Mixer -func (Mixer) Draw(power int) { - fmt.Printf("Mixer is drawing %dkW of electrical power.\n", power) -} - -// ----- +// RUN IT WITH ALL THE FILES IN THE DIRECTORY LIKE SO: +// go run . func main() { rand.Seed(time.Now().UnixNano()) - kettle := Kettle{} - mixer := Mixer{} + var ( + blender Blender + player Player + kettle Kettle + mixer Mixer + ) socket := &Socket{100} - socket.Plug(kettle) - socket.Plug(mixer) + + fmt.Printf("Socket's available power is %d kW.\n", socket.power) + + if err := socket.Plug(blender); err != nil { + fmt.Println("Blender cannot be powered up:", err) + } + + if err := socket.Plug(player); err != nil { + fmt.Println("Player cannot be powered up:", err) + } + + if err := socket.Plug(kettle); err != nil { + fmt.Println("Kettle cannot be powered up:", err) + } + + if err := socket.Plug(mixer); err != nil { + fmt.Println("Mixer cannot be powered up:", err) + } fmt.Printf("Socket's available power is %d kW.\n", socket.power) } diff --git a/interfaces/04-interfaces/power/mixer.go b/interfaces/04-interfaces/power/mixer.go new file mode 100644 index 0000000..a939dda --- /dev/null +++ b/interfaces/04-interfaces/power/mixer.go @@ -0,0 +1,20 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" +) + +// Mixer can be powered +type Mixer struct{} + +// Draw power to a Mixer +func (Mixer) Draw(power int) { + fmt.Printf("Mixer is drawing %dkW of electrical power.\n", power) +} diff --git a/interfaces/04-interfaces/power/player.go b/interfaces/04-interfaces/power/player.go new file mode 100644 index 0000000..dba2a19 --- /dev/null +++ b/interfaces/04-interfaces/power/player.go @@ -0,0 +1,20 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" +) + +// Player can be powered +type Player struct{} + +// Draw power to a Player +func (Player) Draw(power int) { + fmt.Printf("Player is drawing %dkW of electrical power.\n", power) +} diff --git a/interfaces/04-interfaces/power/socket.go b/interfaces/04-interfaces/power/socket.go new file mode 100644 index 0000000..80cc8e7 --- /dev/null +++ b/interfaces/04-interfaces/power/socket.go @@ -0,0 +1,38 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" + "math/rand" +) + +// PowerDrawer represents an electrical device that can draw power. +// The power source doesn't have to be a Socket. +type PowerDrawer interface { + Draw(power int) +} + +// Socket has the power! +type Socket struct { + power int +} + +// Plug a device to draw power from the `Socket` +func (s *Socket) Plug(device PowerDrawer) error { + n := rand.Intn(50) + 1 + + if s.power-n <= 0 { + return fmt.Errorf("socket is out of power for %dkW", n) + } + + s.power -= n + device.Draw(n) + + return nil +}