为了账号安全,请及时绑定邮箱和手机立即绑定

Go设计模式入门到实践

Johnny 软件工程师
难度中级
时长 1小时40分
学习人数
综合评分9.50
9人评价 查看评价
9.6 内容实用
9.8 简洁易懂
9.1 逻辑清晰
  • http中间件能比较好体现装饰模式



    为什么要搞中间件?

    下图是在hello这个handler中实现了3个功能。但是如果有多个handler,这样的非业务代码都要重写。并且非业务和业务代码糅合一起。不好!所以


    然后后面就没听懂了

    查看全部
  • 上面例子里右边更好。因为左边违反了依赖反转。BMW依赖了v6eng的具体实现。

    查看全部
  • // 测试代码

    package demo4_1

    import (

    "fmt"

    "testing"

    )

    // 直接创建产品

    func TestProduct_Create(t *testing.T) {

    product1 := Product1{}        // 创建产品1

    product1.SetName("p1")  // 给产品1设置名称

    name := product1.GetName()    // 获取产品1名称

    fmt.Println(name)


    product2 := Product2{}

    product2.SetName("p2")

    name2 := product1.GetName()

    fmt.Println(name2)

    }


    // 简单工厂方式创建

    func TestProductFactory_Create(t *testing.T) {

    factory := ProductFactory{}                 //定义产品工厂,待工厂生产指定类型产品

    product1 := factory.Create(p1)              // 工厂根据指定,生产产品1

    product1.SetName("p1")                // 给产品1设置名称

    name := product1.GetName()                  // 获取产品1名称

    fmt.Println(name)


    product2 := factory.Create(p2)

    product2.SetName("p2")

    name2 := product2.GetName()

    fmt.Println(name2)

    }

    查看全部
  • // 课程代码

    package demo4_1

    // Product 实现一个产品抽象

    type Product interface {

    SetName(name string) // 设置产品名称

    GetName() string     // 获取产品名称

    }


    // Product1 实现具体的产品:产品1,他有两个方法

    type Product1 struct {

    Name string // 产品1的名称

    }


    // SetName 设置产品名称

    func (p1 *Product1) SetName(name string) {

    p1.Name = name

    }


    // GetName 获取产品名称

    func (p1 *Product1) GetName() string {

    return "产品1的name为:" + p1.Name

    }


    // Product2 实现具体的产品:产品2,他有两个方法

    type Product2 struct {

    Name string // 产品1的名称

    }


    // SetName 设置产品名称

    func (p2 *Product2) SetName(name string) {

    p2.Name = name

    }


    // GetName 获取产品名称

    func (p2 *Product2) GetName() string {

    return "产品1的name为:" + p2.Name

    }


    type productType int // 产品类型变量

    const (

    p1 productType = iota // 0

    p2                    // 1

    )


    // ProductFactory 实现简单工厂类

    type ProductFactory struct {

    }


    // Create 产品工厂根据传入的产品类型,创建出具体产品实现。

    func (pf *ProductFactory) Create(productType productType) Product {

    if productType == p1 {

    return &Product1{}

    }

    if productType == p2 {

    return &Product2{}

    }

    return nil

    }


    查看全部
  • 设计模式分类

    查看全部
  • 策略模式总结

    查看全部
  • 设计模式=武功招式

    算法数据结构=内功

    常见设计模式

    查看全部
  • 面向对象要有三大特征

    设计代码时遵循五大原则

    查看全部
  • 结构嵌套结构依赖于具体的实现

    结构嵌套方法依赖于接口

    BM嵌套v6Engine,车里只有一种具体的引擎

    BM嵌入engine接口,车里可以安装不同的引擎符合依赖反转原则

    查看全部
  • 单一功能原则

    作图如果有三轮车新加入要重新定义三轮车结构和方法不对已经实现的Car和bike做修改符合开闭原则

    go的接口自动符合里氏替换

    查看全部
  • 为什么学设计模式?

    程序员的一种术语方便交流

    提高代码质量提高可复用可扩展性解耦


    查看全部
    0 采集 收起 来源:课程介绍

    2020-08-12

  • 设计模式分类

    查看全部
  • 里氏替换:子类可以替换父类 意义:用抽象完成代码,而不是具体实现。
    查看全部
  • 开闭:对扩展开放,对修改关闭
    查看全部
  • 我的笔记打扫

    查看全部
    0 采集 收起 来源:课程介绍

    2020-05-12

首页上一页12下一页尾页

举报

0/150
提交
取消
课程须知
本课程不是GO语言基础入门课程,需要同学们熟悉GO相关基础语法,如有面向对象相关开发经验最佳。
老师告诉你能学到什么?
1、掌握Go OOP编程,包括三大基本特性、五大基本原则 2、熟悉简单工厂模式、工厂方法模式的区别和应用 3、熟悉装饰模式的应用 4、熟悉策略模式的应用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!