网络编程
位置:首页>> 网络编程>> Go语言>> Go语言基础模板设计模式示例详解

Go语言基础模板设计模式示例详解

作者:package main  发布时间:2024-02-01 16:29:32 

标签:Go语言,设计模式,模板模式
目录
  • 概述

    • 模板模式生活案例

    • 策略模式涉及到两个角色

    • UML

  • 总结

    • 示例

      概述

      模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤

      确定了步骤的执行顺序,单某些步骤因环境或人等因素具体实现是未知的

      模板模式生活案例

      请客吃饭【点菜->吃东西->结账】,每个人点菜不一样,吃东西不一样,结账也不一样从某地到某地【起点->出行方式->终点】起点和终点不一一样,但是每个人出行方式是不一样的

      Go没有封装、继承、多态这些概念,但同样通过别的方式可以实现这些特性

      • 封装:通过方法实现

      • 继承:通过匿名字段实现

      • 多态:通过接口实现

      策略模式涉及到两个角色

      编号角色描述
      1抽象父类(AbstractClass)实现了模板方法,定义了算法的骨架
      2具体类(ConcreteClass)实现抽象类中的抽象方法,即不同的对象的具体实现细节

      UML

      Go语言基础模板设计模式示例详解

      示例


      package main
      import "fmt"
      /*出行方式接口*/
      type Itravel interface {
      Starting() //起点
      Travel()   //出行方式
      End()      //终点
      }
      //定义父类
      type Persion struct {
      Name    string //姓名
      Itravel Itravel  //出行方式接口
      }
      func (persion *Persion) SetName(name string) {
      persion.Name = name
      }
      func (persion Persion) Starting() {
      persion.Itravel.Starting()
      }
      func (persion Persion) Travel() {
      persion.Itravel.Travel()
      }
      func (persion Persion) End() {
      persion.Itravel.End()
      }
      //算法骨架
      func (persion Persion) Start() {
      if persion.Itravel == nil {
      fmt.Println("Itravel is nil")
      return
      }
      fmt.Printf("%s", persion.Name)
      persion.Starting()
      persion.Travel()
      persion.End()
      fmt.Println("\n")
      }
      //具体类:张三
      type ZhangSan struct {
      Persion //匿名字段实现继承
      }
      func NewZhangSan() *ZhangSan {
      c := new(ZhangSan)
      c.Persion = Persion{Itravel: c}
      return c
      }
      func (_ ZhangSan) Starting() {
      fmt.Printf("从%s出发", "北京")
      }

      func (_ ZhangSan) Travel() {
      fmt.Printf(" %s", "火车")
      }
      func (_ ZhangSan) End() {
      fmt.Printf(" %s", "到达上海")
      }
      //具体类:李四
      type LiSi struct {
      Persion
      }
      func (_ LiSi) Starting() {
      fmt.Printf("从%s出发", "广州")
      }
      func (_ LiSi) Travel() {
      fmt.Printf(" %s", "坐飞机")
      }
      func (_ LiSi) End() {
      fmt.Printf(" %s", "到达重庆")
      }
      func main() {
      //张三
      zhangsan := NewZhangSan()
      zhangsan.SetName("张三")
      zhangsan.Start()
      persion := &Persion{}
      persion.SetName("张三")
      persion.Itravel = ZhangSan{}
      persion.Start()
      //李四
      persion.SetName("李四")
      persion.Itravel = &LiSi{}
      persion.Start()
      lisi := LiSi{}
      lisi.Itravel = lisi
      lisi.SetName("李四")
      lisi.Start()
      }

      来源:https://blog.csdn.net/guofeng93/article/details/92088592

      0
      投稿

      猜你喜欢

      手机版 网络编程 asp之家 www.aspxhome.com