`
clq9761
  • 浏览: 594346 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

代理模式

 
阅读更多

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

 

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

 

 

/**
 * 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();
	}
}

 

 

输出结果如下:

 

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

 

  • 大小: 28 KB
分享到:
评论

相关推荐

    代理模式1

    【代理模式】是一种设计模式,它的核心思想是为一个对象提供一个代用品或占位符,以便控制对该对象的访问。在代理模式中,代理对象作为客户端与目标对象之间的中介,处理请求并转发给目标对象,同时可以在转发之前或...

    Java 代理模式详解

    代理模式是我们比较常用的设计模式之一。其中新思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信,代理模式一般涉及到的角色有:  ...

    java代理模式

    Java代理模式是一种设计模式,它在面向对象编程中扮演着重要的角色,主要目的是为了在不修改原有对象的基础上,为对象添加额外的功能或者控制对对象的访问。代理模式的核心思想是通过代理类来间接调用目标类的方法,...

    代理模式代码

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们创建一个代表原始对象的代理对象,以便在客户端和原始对象之间增加一层间接性。这样做的好处包括控制访问、增强功能、延迟加载和安全保护等。在这...

    代理模式实例

    代理模式是一种设计模式,它是结构型模式的一种,主要用于在对象之间提供一个代理以控制对原对象的访问。在这个实例中,我们看到的是如何通过代理模式来实现某种功能的增强或控制。下面将详细讲解代理模式的基本概念...

    代理模式Demo

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代品或代表,以便在不改变原有对象的基础上增加功能、控制访问或者提供额外的交互层。在这个“代理模式Demo”中,我们将深入...

    代理模式Demo代理模式代理模式Demo

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代品或代理,以控制对这个对象的访问。代理模式的核心思想是为一个对象提供一个代理,使得代理对象可以在不改变原有对象行为...

    4代理模式1

    代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,从而在客户端与目标对象之间插入一层间接性。这层间接性提供了多种优势,包括但不限于远程访问、延迟加载、安全控制、性能优化等。代理模式的核心...

    Java Spring代理模式AOP-IOC分析

    Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。它可以在不修改原始代码的情况下,扩展或修改原始对象的行为。代理模式可以分为静态代理和动态代理两种。静态代理...

    代理模式详解1.zip

    代理模式是一种设计模式,它是结构型模式之一,主要用于在客户端和目标对象之间建立一个代理对象,以便控制对目标对象的访问。代理模式的核心思想是为一个对象提供一个替身或者占位符,以便控制对原对象的访问,同时...

    代理模式小例子

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代接口,以控制对原对象的访问。这种模式的主要目的是为了增加灵活性、安全性或者为对象提供额外的功能,同时保持客户端代码...

    代理模式的定义以及应用场景

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,尤其在面向对象编程中。代理模式的核心思想是为一个对象提供一个替身或者代理,以便控制对原对象的访问。这种模式允许我们通过代理对象来间接调用目标对象...

    java 三大代理模式及其实现

    在Java编程领域,代理模式是一种常用的软件设计模式,它允许我们为一个对象提供一个代理以控制对该对象的访问。代理模式可以分为三种主要类型:静态代理、动态代理(也称为JDK代理)和CGLIB代理。这三种代理模式各有...

    6. 代理模式1

    代理模式是一种设计模式,它允许我们在不修改原始类(被代理类)的代码情况下,通过引入一个新的代理类来扩展或增强原始类的功能。这个代理类扮演着原始类的替身,它提供了与原始类相同的接口,但可以在调用原始方法...

    代理模式(Proxy)原理图

    代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...

    C#代理模式

    代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代品或代表,以便控制对原对象的访问。在C#中,代理模式可以让我们在不修改原有对象的基础上,扩展其功能或者在访问对象时...

    Java 静态代理模式

    Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,同时不改变原有对象的代码。在Java中,静态代理是通过在代理类中显式实现目标接口来实现的。下面将详细介绍静态代理模式...

    第16章_代理模式.ppt

    在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和...

    c# 代理模式

    代理模式的应用: 远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。 虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。 安全...

Global site tag (gtag.js) - Google Analytics