标签:int 颜色 obj 过程 函数 空白 main happy imp
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
}
GO语言面向对象01---封装属性与创建对象的方法与工厂模式
标签:int 颜色 obj 过程 函数 空白 main happy imp
原文地址:https://www.cnblogs.com/yunweiqiang/p/11863362.html