go 设计原则 + 设计模式

现在前面

  • 作为一个初学者,看到设计原则和设计模式的时候,就像是发现了新大陆,其中的思想特别值得我们学习,尤其是选择了go作为开发语言,比较喜欢go面向接口编程的理念。所以决定把设计原则+设计模式研读。

  • 设计模式
    1.创建型模式
    —简单工厂模式(Simple Factory)
    —工厂方法模式(Factory Method)
    —抽象工厂模式(Abstract Factory)
    —创建者模式(Builder)
    —原型模式(Prototype)
    —单例模式(Singleton)
    —结构型模式
    2.结构型模式
    —外观模式(Facade)
    —适配器模式(Adapter)
    —代理模式(Proxy)
    —组合模式(Composite)
    —享元模式(Flyweight)
    —装饰模式(Decorator)
    —桥模式(Bridge)
    3.行为型模式
    —中介者模式(Mediator)
    —观察者模式(Observer)
    —命令模式(Command)
    —迭代器模式(Iterator)
    —模板方法模式(Template Method)
    —策略模式(Strategy)
    —状态模式(State)
    —备忘录模式(Memento)
    —解释器模式(Interpreter)
    —职责链模式(Chain of Responsibility)
    —访问者模式(Visitor)

  • 设计原则:
    1.单一职责原则
    2.开放-封闭原则
    3.里氏替换原则
    3.接口隔离原则
    4.依赖倒转原则
    5.迪米特法则

  • 接下来逐一学习整理

1. 简单工厂模式

  • 首先得简单知道下测试用例,以下都是原理+实际案例+测试用例来进行学习。
1.1 原理
  • 工厂模式,顾名思义,一个模型,用来大规模的生产同类产品。该模式将对象的具体实例过程抽象化,并不关心具体的创建过程。通常,工厂模式被用来定义一个对象模型,之后,便可快速规模化实例化对象。
  • 划重点1:不关心具体细节。 有点类似于使用python得第三方库, 我们不关心库实现得细节,只管调用他提供的方法。
  • 划重点2:隐藏了内部实现的细节,遵循开闭原则,不支持修改内部,支持对外扩展。
1.2 实际案例
package simpleFactory

// 定义计算接口
type CaculateApi interface {
	Cacul(num1, num2 int) int
}

// 返回接口实例
func NewAPICaculate(t int) CaculateApi {
	switch t {
	case 1:
		return &addApi{}
	case 2:
		return &divApi{}
	case 3:
		return &mulApi{}
	}
	return nil
}

// 计算接口的一种实现: 加法接口
type addApi struct{}

func (*addApi) Cacul(addNum1, addNum2 int) int {
	sum := addNum1 + addNum2
	return sum
}

// 计算接口的一种实现:除法接口
type divApi struct{}

func (*divApi) Cacul(divNum1, divNum2 int) int {
	div := divNum1 / divNum2
	return div
}

// 计算接口的一种实现:乘法接口
type mulApi struct{}

func (*mulApi) Cacul(mulNum1, mulNum2 int) int {
	mul := mulNum1 * mulNum2
	return mul
}

1.2 测试用例
  • 测试用例部分只是做了单一测试,示例中的也没有考虑等于0的情况,只做理解简单工厂模式使用。
package simpleFactory

import "testing"

func TestAdd(t *testing.T) {
	api := NewAPICaculate(1)
	s := api.Cacul(1, 2)
	if s != 3 {
		t.Fatal("add test fail")
	}
}

func TestDiv(t *testing.T) {
	api := NewAPICaculate(2)
	s := api.Cacul(2, 1)
	if s != 2 {
		t.Fatal("div1 test fail")
	}
}

写在最后

  • 持续更新中
  • 说句题外话,入门语言是python,喜欢python的灵活,写很多辅助性工具,爬虫,数据分析,快速开发web,都很舒服,接触go后,也倾向于面向接口编程的理念。最后,语言没有优劣,每个语言都有各自的理念。选择python+go纯属个人爱好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值