代理模式
优点
- 代理模式为其他对象提供一种代理以控制对一个对象的访问。是一种对象结构型模式。
- 职责清晰。
- 高扩展性。
- 智能化。
缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
场景
- 远程代理。
- 虚拟代理。
- Copy-on-Write 代理。
- 保护(Protect or Access)代理。
- Cache代理。
- 防火墙(Firewall)代理。
- 同步化(Synchronization)代理。
- 智能引用(Smart Reference)代理。
代码
package Proxy import "fmt" type ITask interface { RentHouse(desc string, price int) } type Task struct { } func (t *Task) RentHouse(desc string, price int) { fmt.Println(fmt.Sprintf("租房子的地址%s,价格%d,中介费%d", desc, price, price)) } type AgentTask struct { task *Task } func NewAgentTask() *AgentTask { return &AgentTask{task: &Task{}} } func (t *AgentTask) RentHouse(desc string, price int) { t.task.RentHouse(desc, price) }
package Proxy import "testing" func TestAgentTask_RentHouse(t *testing.T) { agent:=NewAgentTask() agent.RentHouse("浙江省",10099) }
其他设计模式
设计模式Git源代码
00简单工厂模式
01工厂方法模式
02抽象工厂模式
03外观模式
04建造者模式
05桥接模式
06命令模式
07迭代器模式
08模板模式
09访问者模式
10备忘录模式
11责任链模式
12中介模式
13原型模式
14状态模式
15策略模式
16享元模式
17组合模式
18解释器模式
19单例模式
20适配器模式
21代理模式
22装饰器模式
23观察者模式