博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式
阅读量:2431 次
发布时间:2019-05-10

本文共 2073 字,大约阅读时间需要 6 分钟。

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

 

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在 客户端和目标对象之间起到中介的作用。

 

 

/** * Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何 *           使用RealSubject的地方都可以使用Proxy. *  */public abstract class Subject {		public abstract void request();}

 

/** * RealSubject类,定义Proxy所代表的真实实体。 * */public class RealSubject extends Subject {	@Override	public void request() {		System.out.println("真实的请求。");	}}

 

/** * Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject接口相同的接口, * 		   这样代理就可以用来代替实体。 * */public class Proxy extends Subject {		// 真实实体	private RealSubject realSubject;	@Override	public void request() {		if(realSubject == null){			realSubject = new RealSubject();		}		realSubject.request();	}}

 

public class Main {	public static void main(String[] args) {		// 代理类		Proxy proxy = new Proxy();		proxy.request();	}}

 

 

代理模式事例:(代追求者送礼物)

 

/** * 代理接口(送礼物) * */public interface GiveGift {	// 送洋娃娃	public void giveDolls();	// 送鲜花	public void giveFlowers();	// 送巧克力	public void giveChocolate();}

 

/** * 追求者类(真实的实体),实现送礼物接口 * */public class Pursuit implements GiveGift {		// 被追求者	private SchoolGirl mm;		public Pursuit(SchoolGirl mm){		this.mm = mm;	}		public void giveChocolate() {		System.out.println(mm.getName()+"送你巧克力");	}	public void giveDolls() {		System.out.println(mm.getName()+"送你洋娃娃");	}	public void giveFlowers() {		System.out.println(mm.getName()+"送你鲜花");	}}

 

/** * 代理类,也实现送礼物的接口 * */public class Proxy implements GiveGift {		// 真实的实体追求者	private Pursuit gg;		public Proxy(SchoolGirl mm){		gg = new Pursuit(mm);	}	public void giveChocolate() {		// 在实现方法中调用追求者类的相关方法		gg.giveChocolate();	}	public void giveDolls() {		gg.giveDolls();	}	public void giveFlowers() {		gg.giveFlowers();	}}

 

/** * 被追求者类 * */public class SchoolGirl {		private String name;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}}

 

public class Main {	public static void main(String[] args) {		SchoolGirl mm = new SchoolGirl();		mm.setName("娇娇");				Proxy proxy = new Proxy(mm);		proxy.giveChocolate();		proxy.giveChocolate();		proxy.giveFlowers();	}}

 

 

输出结果如下:

 

娇娇送你巧克力娇娇送你巧克力娇娇送你鲜花

 

转载地址:http://oyxmb.baihongyu.com/

你可能感兴趣的文章
漫话:如何给女朋友解释什么是RPC
查看>>
为什么程序员下班后只关显示器从不关电脑?
查看>>
滴滴裁员 2000 人,具体补偿方案已出
查看>>
余生,做个不焦虑的程序员!
查看>>
Spring Boot 中的响应式编程和 WebFlux 入门
查看>>
如何从零开始两天撸一个微信小程序?!(内含源码)
查看>>
女神?御姐?文艺?这样的程序媛你绝没见过! | 程序员有话说
查看>>
“软件外包城”下的马鞍山 | 程序员有话说
查看>>
程序员如何实现财富自由?
查看>>
你我的父母,都在被互联网“割韭菜”
查看>>
程序员下班后都忙些啥?| 程序员有话说
查看>>
Java 帝国对 Python 的渗透能成功吗?
查看>>
程序员写代码没激情该怎么破?
查看>>
百面机器学习!算法工程师面试宝典!| 码书
查看>>
漫画 | 一个前端渣渣的成功逆袭
查看>>
与吴恩达并肩战斗,她是 AI 界的女超人!|人物志
查看>>
微信手机 WeOS 的可行性到底有多大?
查看>>
阿里面试,我挂在了第四轮……
查看>>
C++ 程序员到高级架构师,必须经历的三个阶段
查看>>
和 Java、C# 等语言对比后,Python 简直酷上天了!
查看>>