GoLang面向对象和设计模式实现

码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071

继承

package main

import "fmt"

type People struct {
	name string
	age int
	gender string
}

type Programmer struct {
	People
	level string
}

func main()  {
	data := Programmer{People{"why",24, "male"},"P7"}
	fmt.Println(data.name, data.gender, data.age, data.level)    //why male 24 P7
}

接口规范

package main

import "fmt"

//接口定义方法
type Action interface {
	run(color string)
}

//结构体定义people对象
type People struct {
	name string
}
//结构体定义animal对象
type Animal struct {
	name string
}

//对象(结构体)实现接口定义的方法
func (p *People) run(color string)  {
	fmt.Printf("%v穿着%v色的衣服在跑步\n", p.name, color)
}
//对象(结构体)实现接口定义的方法
func (a *Animal) run( color string)  {
	fmt.Printf("%v穿着%v色的衣服在跑步\n",a.name, color)
}

func main()  {
	//接口不能实例化,所以只能通过对接口的结构体实例化
	p := &People{"why"}
	a := &Animal{"小狗"}

	p.run("紫")
	a.run("黄")
}

策略者模式:通过struct和interface实现多态(原理:通过interface实现的方法可以被多个struct实现)

package main

import "fmt"

//定义interface
type Action interface {
	canDo()
	showPosition()
}

//结构体定义people对象
type People struct {
	name    string
	postion string
}

//不同对象(结构体)实现同一个方法
func (p *People) canDo() {
	fmt.Printf("所以%v会做饭\n", p.name)
}
func (p *People) showPosition() {
	fmt.Printf("因为%v有%v,", p.name, p.postion)
}

//结构体定义animal对象
type Animal struct {
	name     string
	position string
}

func (a *Animal) canDo() {
	fmt.Printf("所以%v会摇尾巴\n", a.name)
}

func (a *Animal) showPosition() {
	fmt.Printf("因为%v有%v,", a.name, a.position)
}

func main() {
	var action Action

	action = &People{"why", "手"}

	action.showPosition()
	action.canDo()

	action = &Animal{"小狗", "尾巴"}
	action.showPosition()
	action.canDo()
}

单例模式

type singleton struct {}
var instance *singleton
func GetIns() *singleton {
    sync.Once.Do( func(){
       instance = &singleton{}  
    })
    return instance
}

简单工厂模式:

package main

import (
	"fmt"
)

type Factory struct{}

func (*Factory) CreateAnimal(name string) Animal {
	switch name {
	case "dog":
		return new(Cat)
	case "cat":
		return new(Dog)
	default:
		return nil
	}
}

type Animal interface {
	Echo()
}

type Cat struct{}

func (*Cat) Echo() {
	fmt.Println("wang wang")
}

type Dog struct{}

func (*Dog) Echo() {
	fmt.Println("miao miao")
}

func main() {
	factory := Factory{}
	cat := factory.CreateAnimal("cat")
	dog := factory.CreateAnimal("dog")
	cat.Echo()
	dog.Echo()
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AirGo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值