• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

GO语言面向对象01---封装属性与创建对象的方法与工厂模式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
package main

import "fmt"

/*
面向过程编程:调度大量的变量、函数
----------
面向对象编程(OOP=Object Oriented Programming)
对象=结构体/类的实例
对象.属性(面向过程中调度变量)
对象.方法(面向过程中调度汗水)
*/

type Dog struct {
	//结构体的属性
	name   string
	age    int
	gender bool

	//结构体的方法
}

func (d *Dog) Eat(food string) {
	fmt.Printf("%s在啃%s", d.name, food)
}

func (d *Dog) Play() {
	fmt.Printf("%s正在Happy\n", d.name)
}

func (d *Dog) Bite(who string) {
	fmt.Printf("本汪%s给%s一些颜色看看\n", d.name, who)
}

func main() {
	//dog := GetDog1()
	//dog := GetDog2()
	//dog := GetDog3()
	//dog := GetDog4()
	dog := NewDog("臭皮", 8, true)

	//访问属性
	fmt.Println(dog.name)

	//访问方法
	dog.Bite("大官人")
}

/*
创建对象方式5:
使用工厂模式
*/
func NewDog(name string, age int, gender bool) *Dog {
	dogPtr := new(Dog)
	dogPtr.name = name
	dogPtr.age = age
	dogPtr.gender = gender

	//假设还有给狗开光、打疫苗、上牌照等等复杂流程...

	return dogPtr
}

/*
创建对象方式4:
通过内建函数new获得对象指针(不必担心得到的是“副本”)
*/
func GetDog4() *Dog {
	//创建一条狗,获得其指针
	dogPtr := new(Dog)

	//通过指针访问属性和方法,与通过对象访问,语法是完全一致的
	dogPtr.name = "小黑"
	dogPtr.age = 8
	dogPtr.gender = true
	return dogPtr
}

/*
创建对象方式3:
有选择地给某些属性赋值
*/
func GetDog3() Dog {
	dog := Dog{age: 8, name: "大黄"}
	return dog
}

/*
创建对象第二种方式:
依次给所有属性赋值
*/
func GetDog2() Dog {
	dog := Dog{"臭皮", 8, true}
	return dog
}

/*
第一种创建对象的方式:
先创建空白对象,再一一给属性赋值
*/
func GetDog1() Dog {
	//创建一条狗的对象
	dog := Dog{}
	//给属性赋值
	dog.name = "旺财"
	dog.age = 8
	dog.gender = true
	return dog
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
gomod使用发布时间:2022-07-10
下一篇:
GeneOntology(GO)注释发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap