美文网首页
go面向对象-三大特性之封装

go面向对象-三大特性之封装

作者: StevenQin | 来源:发表于2019-09-28 22:43 被阅读0次

封装的理解和好处

1、隐藏实现细节
2、可以对数据进行验证,保证安全合理

如何体现封装

1、对结构体中的属性进行封装
2、通过方法、包 实现封装

快速入门

  • 文件结构

model文件夹下面有model.go main文件夹下面main.go

model.go代码:

package model

import "fmt"

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

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

//访问age的方法
func (p *person) SetAge(age int) {
    if age >0 && age <150{
        p.age = age
    }else {
        fmt.Println("年龄不合理")
    }
}
//读取age的方法
func (p *person) GetAge() int {
    return p.age
}
//访问sal的方法
func (p *person) SetSal(sal float64) {
    if sal >=3000 && sal <=30000{
        p.sal = sal
    }else{
        fmt.Println("薪水不符合要求")
    }
}
//读取sal的方法
func (p *person) GetSal() float64 {
    return p.sal
}

main.go代码

package main

import (
    "fmt"
    "go_demo/factory/model"
)

func main() {
    p :=model.NewPerson("steven.qin")
    p.SetAge(30)
    p.SetSal(30000)
    fmt.Println(*p)
    fmt.Println("age = ",p.GetAge()," sal = ",p.GetSal())
}

练习:银行帐号

model.go

package model

import "fmt"

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,
    }
}

func (a *account) SetAccountNo(accountNo string) {
    if len(accountNo) < 6 || len(accountNo) > 10 {
        fmt.Println("账号的长度不对....")
        return
    }
    a.accountNo = accountNo
}

main.go

package main

import (
    "fmt"
    "go_demo/factory/model"
)

func main() {
    accout :=model.NewAccount("rc0011122","78907800",22)
    if accout == nil{
        fmt.Println("创建失败")
    }else{
        fmt.Println("account = ",accout)
    }
}

相关文章

  • Class 的封装及调用-Python教学【StudyQuant

    前言:面向对象的三大特性是指:封装、继承和多态。论Class 的封装及调用 面向对象三大特性 面向对象的三大特性是...

  • 营销比赛二三事

    Python面向对象编程三大特性调研 Python面向对象之封装 在Python中,没有类似 private 之类...

  • 面向对象三大特性

    面向对象 三大特性 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事...

  • Java面试之基础篇

    面向对象的特性 面向对象的三大特性是:封装、继承、多态。 封装 封装就是将一个对象的属性和方法进行封装。同时私有化...

  • struct

    面向对象编程 Go支持面向对象编程特性,但和传统面向对象编程是有区别的,Go并不是纯粹的面向对象语言。 Go没有类...

  • go面向对象-三大特性之封装

    封装的理解和好处 1、隐藏实现细节2、可以对数据进行验证,保证安全合理 如何体现封装 1、对结构体中的属性进行封装...

  • OC面向对象

    OC面向对象—封装 一、面向对象和封装 面向对象的三大特性:封装(成员变量)、继承和多态 在OC语言中,使用@in...

  • 面试 | java基础

    面向对象 1、面向对象特征? 封装封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成...

  • 1.1 封装

    本小节知识: 面向对象三大特性 什么是封装 为什么要进行封装? 封装的好处和原则 1.面向对象三大特性 封装性 继...

  • 面向对象语言基础

    面向对象语言的特性 面向对象的语言的特性:封装、继承、多态。 面向对象语言的设计原则 面向对象的语言在进行程序设计...

网友评论

      本文标题:go面向对象-三大特性之封装

      本文链接:https://www.haomeiwen.com/subject/inhxpctx.html