【一Go到底】第四十三天---封装案例

67 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第43天,点击查看活动详情

要求

  1. 创建程序在model包中定义account结构体:在main函数中体会Golang的封装性。
  2. account结构体要求具有字段:账号(长度在6-10之间)、余额(必须>20)、密码(必须是六 通过SetXxx的方法给Account的字段赋值。(同学们自己完成
  3. 在main函数中测试

代码实现

model包

package model

import "fmt"

/*
创建程序在model包中定义Account结构体:在main函数中体会Golang的封装性。
Account结构体要求具有字段:账号(长度在6-10之间)、余额(必须>20)、密码(必须是六
通过SetXxx的方法给Account的字段赋值。(同学们自己完成
在main函数中测试
*/

// 定义 Account 结构体
type account struct {
	accountNo string
	pwd       string
	balance   float64
}

//工厂模式

func NewAccount(accountNo string, pwd string, balance float64) *account {
	if len(accountNo) < 6 || len(accountNo) > 10 {
		fmt.Println("账号的长度不满足条件")
		return nil
	}
	if len(pwd) != 6 {
		fmt.Println("密码的长度不满足条件")
		return nil
	}
	if balance < 20 {
		fmt.Println("余额不正确")
		return nil
	}
	return &account{
		accountNo: accountNo,
		pwd:       pwd,
		balance:   balance,
	}
}

//编写Set Get方法

func (a *account) SetAccNo(accountNo string) {
	if len(accountNo) < 6 || len(accountNo) > 10 {
		fmt.Println("账号的长度不满足条件")
	} else {
		a.accountNo = accountNo
	}
}
func (a *account) GetAccNo() string {
	return a.accountNo
}

func (a *account) SetPwd(pwd string) {
	if len(pwd) != 6 {
		fmt.Println("密码的长度不满足条件")
	} else {
		a.pwd = pwd
	}
}
func (a *account) GetPwd() string {
	return a.pwd
}

func (a *account) SetBalance(balance float64) {
	if balance < 20 {
		fmt.Println("余额不正确")
	} else {
		a.balance = balance
	}
}
func (a *account) GetBalance() float64 {
	return a.balance
}

main包

package main

import (
	"fmt"
	"go_code/chapter28-encapsulate/encapExercise/model"
)

func main() {
	// 定义变量
	account := model.NewAccount("ICBC1574", "123456", 8888.8888)
	// default account =  {ICBC1574 123456 8888.8888}
	fmt.Println("default account = ", *account)

	// 修改密码
	account.SetPwd("654321")
	// change pwd account =  {ICBC1574 654321 8888.8888}
	fmt.Println("change pwd account = ", *account)

	// 修改余额
	account.SetBalance(10000)
	// 查看余额
	// 修改后的余额 = 10000
	fmt.Printf("修改后的余额 = %v\n", account.GetBalance())

	// 单独获取信息
	// ICBC1574 的密码是 654321 ,余额 = 10000
	fmt.Printf("%v 的密码是 %v ,余额 = %v\n", account.GetAccNo(), account.GetPwd(), account.GetBalance())
}