![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
gongyuejingmen
这个作者很懒,什么都没留下…
展开
-
golang中如何阻塞等待所有goroutines都完成
方案一: 也是推荐方案,也是官方推荐方案,涉及到一个写并发经常关注的模块sync模块,利用里面的sync.WaitGroup去做 代码如下: package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 5...转载 2019-01-21 21:29:58 · 7962 阅读 · 0 评论 -
设计模式——模板方法模式
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。(模板方法将算法定义成一组步骤,其中任何步骤都可以是抽象的,由子类负责实现。) 工厂方法是模板方法的一种特殊版本。 钩子:在当前类不做事或实现默认方法,但子类中可以选择实现或者不实现该方法。下面的go模板方法模式中,没办法实现钩子。 钩子目的:1.算法部...原创 2019-03-18 10:56:59 · 103 阅读 · 0 评论 -
设计模式——外观模式和最少知识原则
外观模式:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 最少知识原则(墨尔忒法则):只和你的密友谈话。 如何避免影响太多对象?对象的方法内,只应调用属于以下范围的方法: 1.访问对象本身(的方法) 2.作为方法入参传入的对象(的方法) 3.方法内创建/实例化的对象(的方法) 3.对象属性中包含的对象(的方法) ...原创 2019-03-18 10:17:31 · 207 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。 1.对象适配器 package main import "fmt" //标准接口 type Target interface { quack() fly() } //被适配对象 type Adaptee interface{ gobble() fly() } //适配器 type...原创 2019-03-16 00:08:17 · 69 阅读 · 0 评论 -
设计模式——命令模式
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 package main import "fmt" //灯 type Light struct{ room string } func (l Light) on(){ fmt.Println(l.room, "light is on") } func (l Light) of...原创 2019-03-17 20:10:08 · 82 阅读 · 1 评论 -
设计模式——单例模式
单例模式:确保一个类只有一个实例,并提供全局访问。 有些对象只需要一个:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机、显卡等设备的驱动的对象。 1.JAVA中单例模式的实现:. //每次获取实例都加锁 public class Singleton{ private static Singleton uniqueInstance;//static属于类 ...原创 2019-03-15 21:08:13 · 96 阅读 · 0 评论 -
设计模式——工厂方法&抽象工厂
1.工厂方法:定义了一个创建对象的接口,但由子类来决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 package main import "fmt" //Pizza基类 type AbstarctPizza interface{ prepare() bake() cut() box() } type Pizza struct{ name string dou...原创 2019-03-15 17:53:33 · 122 阅读 · 0 评论 -
设计模式——装饰者模式
动态地将责任附加到对象上。提供有别于继承的另一种扩展功能的选择。 package main import "fmt" //抽象组件 type AbstractBeverage interface{ getDescription() string cost()float64 } type Beverage struct{ description string } func (b Bev...原创 2019-03-15 12:26:56 · 88 阅读 · 0 评论 -
设计模式——观察者模式
定义了对象之间的一对多依赖,当一个对象改变状态时它所有的依赖者都会收到通知并自动更新。 package main import "fmt" type Subject struct{ observers []*Observer temp float32 humidity float32 pressure float32 } type Observer struct{ ...原创 2019-03-15 11:01:34 · 72 阅读 · 0 评论 -
设计模式——策略模式
一、策略模式 定义了算法族,分别封装起来,让它们之间可以相互替换。让算法的变化独立于算法的使用者。 package main import "fmt" type Quack interface { quack() } type Fly interface{ fly() } type Duck struct{ Quack Fly } //两种叫的方法 type ZiziQua...原创 2019-03-14 23:47:47 · 71 阅读 · 0 评论