12 代理模式

核心作用:通过代理,控制对对象的访问。

代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

可以详细控制某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(AOP的微观实现)

AOP (Aspect Oriented Programming)面向切面编程的核心实现机制!

代理对象UML图

从图中,我们可以看到:

1、抽象角色

定义代理角色和真实角色对外的方法

2、真实角色

实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用

3、代理角色

实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

分类:

静态代理:静态定义代理类

动态代理:程序运行时运用反射机制动态创建而成。

/**
 * 抽象角色
 *
 * @author sun
 *
 */
public interface Star {
    /**
     * 面谈
     */
    void confer();

    /**
     * 签合同
     */
    void signContract();

    /**
     * 订机票
     */
    void bookTicket();

    /**
     * 唱歌
     */
    void sing();

    /**
     * 收钱
     */
    void collectMoney();

}
/**
 * 真实角色
 *
 * @author sun
 *
 */
public class RealStar implements Star {

    @Override
    public void confer() {
        System.out.println("RealStar confer");
    }

    @Override
    public void signContract() {
        System.out.println("RealStar signContract");
    }

    @Override
    public void bookTicket() {
        System.out.println("RealStar bookTicket");
    }

    @Override
    public void sing() {
        System.out.println("RealStar(周杰伦) sing");
    }

    @Override
    public void collectMoney() {
        System.out.println("RealStar collectMoney");
    }

}
/**
 * 代理类
 *
 * @author sun
 *
 */
public class ProxyStar implements Star {
	private Star star;

	public ProxyStar(Star star) {
		super();
		this.star = star;
	}

	@Override
	public void confer() {
		System.out.println("ProxyStar confer");
	}

	@Override
	public void signContract() {
		System.out.println("ProxyStar signContract");

	}

	@Override
	public void bookTicket() {
		System.out.println("ProxyStar bookTicket");

	}

	@Override
	public void sing() {
		System.out.println("ProxyStar sing");

	}

	@Override
	public void collectMoney() {
		star.sing();
	}

}

  

/**
 * 客户端测试
 *
 * @author sun
 *
 */
public class Client {
	public static void main(String[] args) {
		Star real = new RealStar();
		ProxyStar proxyStar = new ProxyStar(real);
		proxyStar.bookTicket();
		proxyStar.confer();
		proxyStar.collectMoney();
		proxyStar.sing();
		proxyStar.signContract();
	}
}

  

时间: 2024-10-17 08:04:35

12 代理模式的相关文章

设计模式学习--------12.代理模式学习

场景: 福尔摩斯一直想送礼物给花生,但是羞于直接赠送,于是想到让房东太太去帮忙送礼物.编程如何实现呢? 定义: 为其他对象提供一种代理以控制对这个对象的访问. 角色: Proxy:代理对象.有下列功能: 实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象. 持有一个具体目标对象的引用,可以在需要时调用具体的目标对象. 可以控制对目标对象的访问,并可以负责创建和删除它. package com.kris.study; public class Proxy implements

二十三种设计模式[12] - 代理模式(Proxy Pattern)

前言 代理模式,属于对象结构型模式.在<设计模式 - 可复用的面向对象软件>一书中将之描述为" 为其它对象提供一种代理以控制对这个对象的访问 ". 在代理模式中,通常使用一个类来代表另一个类的功能,并由这个代理对象去控制原对象的引用. 结构 Subjuet(公共接口):代理类和被代理类的公共接口,保证任何使用目标的地方都可以被代理类替换: RealSubject(被代理类):代理类所代表的目标类: Proxy(代理类):包含对目标类的引用,目标类的封装: 场景 在日常生活中

五、代理模式详解

7.代理模式 7.1.课程目标 1.掌握代理模式的应用场景和实现原理. 2.了解静态代理和动态代理的区别. 3.了解CGLib和JDK Proxy的根本区别. 4.手写实现定义的动态代理. 7.2.内容定位 都知道 SpringAOP 是用代理模式实现,到底是怎么实现的?我们来一探究竟,并且自己仿真手写 还原部分细节. 7.3.代理模式定义 代理模式(ProxyPattern)是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式. 在某些情况下,一个对象不适合或者不能直接引用另一个

第12章 代理模式(Proxy Pattern)

原文   第12章 代理模式(Proxy Pattern) 代理模式 概述: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切.这就是本文要说的Proxy模式. 结构图:     举例:       代练游戏,玩游戏,自己不想花时间去升级.委托给代练. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

设计模式12: Proxy 代理模式(结构型模式)

Proxy 代理模式(结构型模式) 直接与间接 人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活.满足特定需求的解决方案.如下图,开始时,A需要和B进行3次通信,当增加一个C后,C和B只需要通信一次,A和C通信3次就好了. 动机(Motivation) 在面向对象系统中某些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全机制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦. 如果在不失去透明操作对象的同时来管理.控制这些

设计模式完结(12)-- 代理模式

代理模式与装饰模式区别: 装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问.换句话说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息. 因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例.并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器. 我们可以用另外一句话来总结这些差别:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造

&quot;围观&quot;设计模式(12)--结构型之代理模式(Proxy Pattern)

维基百科 代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式. 所谓的代理者是指一个类可以作为其它东西的接口.代理者可以作任何东西的接口:网络连接.内存中的大对象.文件或其它昂贵或无法复制的资源.----WIKIPEDIA 个人理解 代理模式就是找另外的一个对象作为代理去为你实施请求,代理模式分为两种,一种是静态代理模式,另外一种是动态代理模式,静态代理模式是代理类为其创建一个对象,将需要代理的类的对象赋予代理类中的该对象,让代理类中该对象去代替需要代理的类的对象去执行一定的

代理模式(Proxy)

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到的角色有 抽象角色:声明真实对象和代理对象的共工接口 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象.同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装. 真实角色:代理角色所代表的真实对

设计模式之代理模式

代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问.使用场合,第一,远程代理,也就是为一个对象在不同的地址空间提供局部代表.这样可以隐藏一个对象存在于不同地址空间的事实:第二,虚拟代理,是根据需要创建开销很大的对象.通过它来存在实例化需要很长时间的真实对象:第三,安全代理,用来控制真实对象访问时的权限:第四,智能指引,是指当调用真实的对象时,代理处理另外一些事情.代理模式与外观模式有点像,但外观模式中外观与实体不一定具备相同的接口,两者都在一定程度上隐藏了系统的复杂性. 代理模式