add a log decorator

This commit is contained in:
Edward 2020-05-03 00:27:46 +08:00
parent 7d45e9b44b
commit 8075a8e439
3 changed files with 35 additions and 4 deletions

View File

@ -1,8 +1,9 @@
# Go语言设计模式示例集合(Go Patterns Examples) # Go语言设计模式示例集合(Go Patterns Examples)
39种Go中常用的、面向工程化和最佳实践的模式套路当然也包含常见的23种设计模式,重点是这里全部是例子、通俗易懂,甚至每个模式下的例子,改一下名字,稍微再增加几行代码就可以直接用在项目和工程中了。 **包括了[go-patterns](https://github.com/tmrts/go-patterns) 和[golang-design-pattern](https://github.com/senghoo/golang-design-pattern)中的全部模式!!!**
目前包括了**39种Go中常用的、面向工程化和最佳实践的模式/套路**自然也包含常见的23种设计模式,重点是这里全部是例子、通俗易懂,甚至每个模式下的例子,改一下名字,稍微再增加几行代码就可以直接用在项目和工程中了。
包括了[go-patterns](https://github.com/tmrts/go-patterns) 和[golang-design-pattern](https://github.com/senghoo/golang-design-pattern)中的全部模式!!!
每一种设计模式都有其特定的应用场景和要解决的问题,了解模式的关键点就在于弄清这些目标场景和问题,千万不要纠结于:为什么这个模式叫这个名字,这个模式为啥要这样用? 每一种设计模式都有其特定的应用场景和要解决的问题,了解模式的关键点就在于弄清这些目标场景和问题,千万不要纠结于:为什么这个模式叫这个名字,这个模式为啥要这样用?
@ -70,7 +71,7 @@
## 参考资料(Design patters Articles) ## 参考资料(Design patters Articles)
[go-patterns)](https://github.com/nynicg/go-patterns) [go-patterns](https://github.com/nynicg/go-patterns)
[design-pattern-tutorial](https://www.runoob.com/design-pattern/design-pattern-tutorial.html) [design-pattern-tutorial](https://www.runoob.com/design-pattern/design-pattern-tutorial.html)

View File

@ -1,6 +1,6 @@
# 装饰器模式 # 装饰器模式
装饰器模式就是比较简单了,就是做装饰,其目的是在不改变原有类型对象的情况下,对其进行装饰,扩展,以达到公共强化和扩展的目的。 装饰器模式就是比较简单了,就是做装饰,其目的是在不改变原有类型/功能/对象的情况下,对其进行装饰,扩展,以达到公共强化和扩展的目的。
装饰模式的目的是在原有功能或者能力的基础上提供额外的更多的能力和特性,这一点和代理模式、复合模式是有很大不同的,了解每一种模式,重点是要了解这个模式的最初的设计者应用场景和其解决目的,以便加以利用。 装饰模式的目的是在原有功能或者能力的基础上提供额外的更多的能力和特性,这一点和代理模式、复合模式是有很大不同的,了解每一种模式,重点是要了解这个模式的最初的设计者应用场景和其解决目的,以便加以利用。

View File

@ -0,0 +1,30 @@
package decorator
import (
"log"
"testing"
)
//装饰一个函数,或者说包装一个函数
type FuncToDecorate func(int) int
func TestDecorateLog(t *testing.T) {
f := LogDecorate(Double)
f(5)
}
func Double(n int) int {
return n * 2
}
func LogDecorate(fn FuncToDecorate) FuncToDecorate {
return func(n int) int {
log.Println("Starting the execution with the integer", n)
result := fn(n)
log.Println("Execution is completed with the result", result)
return result
}
}