diff --git a/interfaces/demo2.go b/interfaces/demo2.go new file mode 100644 index 0000000..3a59997 --- /dev/null +++ b/interfaces/demo2.go @@ -0,0 +1,54 @@ +package interfaces + +import "fmt" + +type Mortgage struct{ + creditPaymentTotal float64 + address string + rate float64 +} + +type Car struct{ + creditPaymentTotal float64 + carInfo string + rate float64 +} + +type CreditCalculator interface{ + Calculate() float64 +} + +func (m Mortgage) Calculate() float64{ + return m.creditPaymentTotal * m.rate / 12 +} + + +func (c Car) Calculate() float64{ + return c.creditPaymentTotal * c.rate / 12 +} + +func CalculateMonthlyPayment(credits []CreditCalculator) float64{ + + paymentTotal:= 0.0 + + for i := 0; i < len(credits); i++ { + paymentTotal = paymentTotal + (credits[i].Calculate()) + } + return paymentTotal +} + +func Demo2() { + + credit1:= Mortgage{rate:10, creditPaymentTotal: 100000, address: "Ankara"} + + credit2:= Mortgage{rate:12, creditPaymentTotal: 50000, address: "İstanbul"} + + credit3:= Car{rate:15, creditPaymentTotal: 60000, carInfo:"Polo"} + + credits:= []CreditCalculator{credit1, credit2, credit3} + + total:= CalculateMonthlyPayment(credits) + + fmt.Println("Total payment", total) + +} \ No newline at end of file diff --git a/main.go b/main.go index d3ab7a9..20d9132 100644 --- a/main.go +++ b/main.go @@ -78,4 +78,5 @@ func main() { fmt.Println("Multiply Result : ", multiply) interfaces.Demo1() + interfaces.Demo2() }