文档章节

大话设计模式(golang) 四、代理模式

平凡之路
 平凡之路
发布于 2016/07/13 14:06
字数 289
阅读 73
收藏 0

模式特点:为其他对象提供一种代理以控制对这个对象的访问。

模式好处:对外部提供统一的接口方法,而代理类在接口中实现对真实类的附加操作行为,从而达到了“对修改关闭,对扩展开放”(OCP原则)

应用场景:当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式。

程序实例:戴利帮小菜送礼物

package main

import (
	"fmt"
)

type SchoolGirl struct {
	name string
}

type Proxy struct {
	gg Pursuit
}

func NewProxy() *Proxy {
	return &Proxy{Pursuit{"小菜", "娇娇"}}
}
func (p *Proxy) GiveDolls() {
	p.gg.GiveDolls()
	fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}

func (p *Proxy) GiveFlowers() {
	p.gg.GiveFlowers()
	fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}

func (p *Proxy) GiveChocolate() {
	p.gg.GiveChocolate()
	fmt.Println("戴利顺便放一张贺卡:祝你生日快乐!——戴利")
}

type GiveGift interface {
	giveDolls()
	giveFlowers()
	giveChocolate()
}

type Pursuit struct {
	name string
	mm   string
}

func (p *Pursuit) GiveDolls() {
	fmt.Println(p.name, "送", p.mm, "洋娃娃")
}

func (p *Pursuit) GiveFlowers() {
	fmt.Println(p.name, "送", p.mm, "鲜花")
}

func (p *Pursuit) GiveChocolate() {
	fmt.Println(p.name, "送", p.mm, "巧克力")
}

func main() {
	daili := NewProxy()
	daili.GiveDolls()
	daili.GiveFlowers()
	daili.GiveChocolate()
}

 

© 著作权归作者所有

平凡之路
粉丝 42
博文 54
码字总数 14528
作品 0
海淀
架构师
私信 提问
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
EasyToLearnDesignPattern

简单上手设计模式 GITHUB:https://github.com/Fisher-Joe/EasyToLearnDesignPattern 本文旨在使用最简单的语言,最简单的代码让人学习设计模式(最起码是我) 说明: 本文的所有内容都是基于...

芝麻开门
04/19
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2

没有更多内容

加载失败,请刷新页面

加载更多

阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?

轻松筹首创了“大病救助”模式,帮助了众多病患在第一时间解決了医疗资金等问题,为了从源头解决了医疗资金问题。而在轻松筹这样全球5.5亿用户信赖的大病筹款平台的背后,是日益增长的各种数...

阿里云云栖社区
12分钟前
3
0
Confluence 6 在升级过程中查看合并日志

为了监控升级的过程,你应该查看 application log 日志中的输出。 通常日志经常将会显示多个日志实例,这个实例是定义在日志的 INFO 级别的,通常格式如下: WikiToXhtmlMigrationThread-n -...

honeymoose
12分钟前
1
0
git diff 文件对比

git diff filepath 工作区与暂存区比较 git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较 git diff --staged 或 --cached filepath 暂存区与HEAD比较 git diff branchName filepa......

李佳顺
13分钟前
1
0
spring mvc 定制化配置

spring mvc 自定义配置 1.实现某些接口,然后让上面的类加载进去. class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean......

最爱肉肉
15分钟前
1
0
OSG_采样像机的内容如果不显示到窗口上

cameraLight->setRenderTargetImplementation(Camera::FRAME_BUFFER_OBJECT);// 这句使内容不渲染到屏幕上cameraLight->setRenderOrder(Camera::PRE_RENDER); 1.setRenderTargetImplement......

洛克人杰洛
18分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部