zoukankan      html  css  js  c++  java
  • GO语言面向对象01---封装属性与创建对象的方法与工厂模式

    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
    ", d.name)
    }
    
    func (d *Dog) Bite(who string) {
    	fmt.Printf("本汪%s给%s一些颜色看看
    ", 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
    }
    

      

  • 相关阅读:
    OpenJDK与HashMap
    跨终端Web之Hybrid App
    Java日志性能
    openstack
    Hadoop下各技术应用场景
    股票基金看哪些书
    Java内存模型的历史变迁
    浅谈JS DDoS攻击原理与防御
    清除Windows 10的文件夹浏览痕迹
    linux删除文件后没有释放空间
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11863362.html
Copyright © 2011-2022 走看看