golang封装简单应用

main.go

package main

import (
	"fmt"

	"github.com/面向对象编程/面向对象编程思想/封装/model"
)

/*
	封装(encapsulation)就是把抽象出的字段和字段的操作封装在一起,
	数据被保护在内部,程序的其他包只有通过被授权的操作,才能对字段进行操作
	封装的理解和好处
	1.隐藏实现细节
	2.可以对数据进行验证,保证安全合理
	如何体现封装
	1.对结构体中的属性进行封装
	2.通过方法,包实现封装
	实现步骤
	1.将结构体、字段的首字母小写(不能导出,其他包不能使用)
	2.给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数
	3.提供一个首字母大写的Set方法,用于对属性判断并赋值
	func (var 结构体类型名) SetXxx(参数列表)(返回值列表){
		var.字段 = 参数
	}

	4.提供一个首字母大写的Get方法,用于获取属性的值
	func (var 结构体类型名) GetXxx(){

		return var.字段
	}
*/
//不能随便查看人的年龄,工资等隐私,并对输入的年龄进行合理验证
//model包(person.go)main包(main.go调用Person结构体)
func main() {

	person := model.NewPerson("smith")
	person.SetAge(18)
	person.SetSal(15000)
	fmt.Println(person)
	fmt.Println("姓名为", person.Name, "年龄为", person.GetAge(), "薪水为", person.GetSal())
}

person.go

package model

import "fmt"

type person struct {
	Name string
	age  int //其他包不能访问
	sal  float64
}

//写一个工厂模式函数,相当于构造函数
func NewPerson(name string) *person {

	return &person{
		Name: name,
	}
}

func (p *person) SetAge(age int) {

	if age > 0 && age < 200 {

		p.age = age
	} else {
		fmt.Println("年龄范围不正确")
	}
}
func (p *person) GetAge() int {

	return p.age
}

func (p *person) SetSal(sal float64) {

	if sal > 3000 && sal < 30000 {

		p.sal = sal
	} else {
		fmt.Println("薪水范围不正确")
	}
}
func (p *person) GetSal() float64 {

	return p.sal
}

  

posted @ 2022-03-09 14:49  Star_Gazer  阅读(108)  评论(0编辑  收藏  举报