Go设计模式 - 简单工厂模式
4. 简单工厂模式4.1 简单工厂模式角色和职责简单工厂模式并不属于GoF的23种设计模式。他是开发者自发认为的一种非常简易的设计模式,其角色和职责如下: 工厂(Factory)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 抽象产品(AbstractProduct)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:简单工厂模式所创建的具体实例对象。 4.2 简单工厂模式实现简单工厂方法模式的实现代码如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport "fmt"// TODO 简单工厂模式// ----抽象层----type Stationery interface { Show()}// ----实现层----type Pe...
Go设计模式 - 创建型模式
3. 创建型模式 模式名称 模式名称 作用 创建型模式 Creational Pattern(6) 单例模式★★★★☆ 是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 简单工厂模式★★★☆☆ 通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 工厂方法模式★★★★★ 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 抽象工厂模式★★★★★ 提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。 原型模式★★★☆☆ 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 建造者模式★★☆☆☆ 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 目前标准的创建型设计模式共有6种(注:设计模式种类并非仅仅局限于此,设计模式实则是一种编程思想,开发者可以根据自身经验来总结出很多种设计模式思想,这6中创建型设计模式为早期官方认可的标准模式) 本章节主要介绍常用的“单例模式”、“简单工程模式”、“工厂方法模式”、“抽象工厂模式”等。“原型模式”、“建造者模式...
Go设计模式 - 面向对象设计原则
2. 面向对象设计原则对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一。 原则的目的: 高内聚,低耦合 2.1 面向对象设计原则表 名称 定义 单一职责原则(Single Responsibility Principle, SRP)★★★★☆ 类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。 开闭原则(Open-Closed Principle, OCP)★★★★★ 类的改动是通过增加代码进行的,而不是修改源代码。 里氏代换原则(Liskov Substitution Principle, LSP)★...
Go设计模式 - 概述
1. Go设计模式概述如果把修习软件开发当做武功修炼的话,那么可以分为招式和内功。 招式: ●Java、C#、C++、Golang、Rust等编程语言; ● Eclipse、Visual Studio、Goland、Vim等开发工具; ● Struts、Hibernate、JBPM、Gin、Istio、gRPC等框架技术; 内功: ●数据结构 ●算法 ●设计模式 ●架构设计 ●软件工程 注意:招式可以很快学会,但是内功的修炼需要更长的时间 1.1 设计模式从何而来 上图是“模式之父”,Christopher Alexander(克里斯托弗.亚历山大)———哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授、加州大学伯克利分校环境结构研究所所长、美国艺术和科学院院士。 克里斯托弗.亚历山大在作品《建筑的永恒之道》中对“模式”的描述是: “每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。” 他给出了设计模式的定义。 我们也可以用下面这句话来理解“设...
常见坑1~10
1.常见坑1~1001.nil slice & empty slice1.1 nil切片与空切片底层 nil切片:var nilSlice []string nil slice 的长度len和容量cap都是0 nil slice == nil nil slice的pointer 是nil, 空切片:emptySlice0 := make([]int, 0) empty slice的长度是0, 容量是由指向底层数组决定 empty slice != nil empty slice的pointer是底层数组的地址 nil切片和空切片最大的区别在于指向的数组引用地址是不一样的。 nil空切片引用数组指针地址为0(无指向任何实际地址) 空切片的引用数组指针地址是有的,且固定为一个值,所有的空切片指向的数组引用地址都是一样的 1.2 创建nil slice和empty slice1234567891011121314151617181920package mainimport "fmt"func main() { var nilSli...