《大话设计模式》--代理模式
题目:一个男孩让另一个男孩代理去送一个女孩礼物
public class SchoolGirl { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
public interface GiveGift { void giveDoll(); void giveFlower(); void giveChocolate(); }
public class Pursuit implements GiveGift { SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } @Override public void giveDoll() { System.out.println(mm.getName() + "送你洋娃娃"); } @Override public void giveFlower() { System.out.println(mm.getName() + "送你鲜花"); } @Override public void giveChocolate() { System.out.println(mm.getName() + "送你巧克力"); } }
public class Proxy implements GiveGift { Pursuit gg; public Proxy(SchoolGirl mm) { gg = new Pursuit(mm); } @Override public void giveDoll() { gg.giveDoll(); } @Override public void giveFlower() { gg.giveFlower(); } @Override public void giveChocolate() { gg.giveChocolate(); } }
public class Action { public static void main(String args[]) { SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.setName("李娇娇"); Proxy daili = new Proxy(jiaojiao); daili.giveDoll(); daili.giveFlower(); daili.giveChocolate(); } }
打印结果:
李娇娇送你洋娃娃
李娇娇送你鲜花
李娇娇送你巧克力
原理就是:
1.Pursuit和Proxy都实现了GiveGift接口,但Proxy中实际调用的也是Pursuit的方法
2.Proxy的构造函数也是为了生成Pursuit的对象
3.所以在Action中,我们只看到了Proxy在忙来忙去,Pursuit被隐藏了起来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现