设计模式-代理模式(Go语言描述)
大家好, 我是大帅哥,由于最近又变帅了, 所以我决定由我的代理人小帅哥来写这篇博客,不过内容可以放心,还是由我来完成,小帅哥的活就是将我的内容替我发出来罢了。 &_& 还是进入正题吧, 今天这篇博客我们继续来学习设计模式, 在学习了上面几个设计模式以后大家有无发现设计模式其实很简单, 难道地方是什么时候选用适合的模式, 这也是设计模式最重要的地方, 不能我们学会的设计模式就能够乱用。 明白就好…… 下面我们就开始介绍1个新的设计模式-代理模式。 模式定义甚么是代码模式? 其实文章刚开始的段子其实不是寻开心的,其实那就是现实生活中的1个代理模式, 你和我之前通过1个中间人来完成通讯, 其实就这么简单。 虽然简单, 我们还是有必要来看1下人家总结的定义:
怎样理解呢? 网上有1个段子解释的很好, 比如你喜欢1个妹子, 不好意思跟人家开口, 这时候候你可能就通过她舍友来表达你的倾慕了。 再来看看代理模式的类图吧,通常情况下, 看完定义迷迷糊糊的, 看完类图可能就糊糊的, 等看完代码示例, 就完全明白了。 从图中可以看到, 代理模式共有4个角色, 其中1个还是抽象的。
不过, 仔细看看类图, 我开始怀疑代理模式的必要性了。 有必要吗? 我直接去调用 代码演示好了, 文字的东西不多扯了, 下面我们就用代码来演示1下吧, 在今天我代码中, 我们来摹拟1下平时我们使用github的进程,我们在从github上clone项目的时候1般都是通过命令行来完成吧, 其实这个命令行完全可以看做是github的1个代理。 根据上面的类图, 我们首先要提供1个抽象的接口来规范代理和对象的行动 type Git interface {
Clone(url string) bool
} ok, 很简单, 只有1个 type GitHub struct{}
func (p GitHub) Clone(url string) bool {
if strings.HasPrefix(url,"https") {
fmt.Println("clone from " + url)
return true
}
fmt.Println("failed to clone from " + url)
return false
}
type GitBash struct {
Gitcmd Git
}
func (p GitBash) Clone(url string) bool {
return p.Gitcmd.Clone(url)
} 这是我们的命令行, 它持有1个 还剩下最后1个角色, 那就是我们 type Coder struct{}
func (p Coder) GetCode(url string) {
gitBash := GetGit(1)
if gitBash.Clone(url) {
fmt.Println("success")
} else {
fmt.Println("failed")
}
}
func GetGit(t int) Git {
if t == 1 {
return GitBash{Gitcmd: GitHub{}}
}
return nil // 可能还有其他的git源
} 首先,我们知道我们是要从 完善, 现在理解甚么是代理模式了吧。代理模式其实最主要的用处就是当我们没法直接访问1个对象的时候, 通过代理的方式来完成对对象的访问。代理模式具有高扩大性,假设我们需要从 今天的博客很简单,其实模式的代码都是很简单的,不要被设计模式这4个字吓到。 我们6月份再见! 代码放github上了,欢迎star: https://github.com/qibin0506/go-designpattern (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |