兄弟连Go语言培训教程面向对象1:封装

XDLGo · · 638 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

面向对象概述 在没有面向对象的年代,编程的方式是面向过程的 面向过程的编程,管理的是一个一个的函数,撸工程就是堆砌大量的函数 面向对象中类的概念,Go语言是通过结构体来实现的 类/结构体是对函数的进一步封装,即把有机关联的变量和函数封装为一个结构体 有了类/结构体的概念以后,撸工程就由管理大量的函数变为了管理少量的类 书本理论中面向函数的三大特性是:封装、继承、多态(有时会再加一个抽象) 继承性实现了低成本地扩展原有代码 多态性实现了大规模代码的组装和调度 面向对象使工程开发变成了搭建框架和组装模块的游戏 面向对象的出现使大规模协作与大规模开发变得更容易了 封装性概述 封装就是将业务逻辑相近的变量和函数封装在一起,成为一个结构体 被封起来的变量称之为属性 被封起来的函数称之为方法 封装也是继承和多态的基础 封装结构体 下面的例子,把狗的属性(名字和性别)和狗的方法(取名字和咬人)封装成了一个结构体 //定义结构体 type Dog struct { //定义狗的属性 name string sex int } /*封装狗的方法*/ //setter func (d *Dog)SetName(name string) { //在这里可以加一些权限校验 d.name = name } //getter func (d *Dog)GetName() string { //在这里可以加一些权限校验 return d.name } //定义咬人方法 func (d *Dog)bite() { fmt.Printf("让本汪%s来给你一些震撼教育...",d.name) } 创建空白对象并给属性赋值 func demo21() { //创建空白对象 d := Dog{} //给对象的属性赋值 d.name = "臭皮" d.sex = 1 fmt.Println(d.sex) d.bite() } 创建对象的同时有序而完整地给属性赋值 func demo22() { //创建对象的同时有序而完整地给属性赋值 d := Dog{"臭皮", 1} fmt.Println(d.sex) d.bite() } 创建对象并有选择地给属性赋值 func demo23() { d := Dog{name: "臭皮"} d.sex = 1 d.SetName("旺财") fmt.Println(d.GetName()) d.bite() } 创建空白指针对象并给属性赋值 func demo24() { dp := new(Dog) //通过【指针】访问结构体的【成员】(包括属性和方法)和通过【值】访问一模一样 dp.SetName("臭皮") dp.bite() } 使用工厂模式创建对象 封装【创建实例的重复复杂过程】为固定的套路和【模式】 以后就可以【反反复复】、【轻松加愉快】地复用模式和套路了 正所谓【自古真情没卵用,唯有套路得人心】,阿门 这个一次封装、反复玩弄的套路,就称为【工厂模式】 工厂模式——将造实例这件事情做专业化的封装,并反复调用 //工厂方法 func NewDog(name string,sex int) *Dog { d := new(Dog) d.name = name d.sex = sex return d } //使用工厂模式创建对象 func demo25() { xiaohei := NewDog("小黑", 1) xiaohei.bite() }

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

638 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传