文档章节

设计模式之代理设计模式

M
 Mazin
发布于 2017/05/03 22:39
字数 470
阅读 0
收藏 0

代理设计模式的核心思想就是创建一个目标类的代理对象,这个对象和目标对象一样实现了同一个接口,并且代理对象是持有这个目标对象的引用,可以在执行目标对象的方法前后对其进行控制。spring的aop就是一个典型的代理模式。

下面我们通过一段简单的代码来理解一下代理模式

首先定义一个接口:

public interface SuperStar {

	public void action();
}

定义一个接口的实现类,这个实现类就是我们的目标类:

public class RealStar implements SuperStar{

	@Override
	public void action() {
		System.out.println("大明星要开始表演了!!!");
	}
}

定义另一个接口实现类,这个类就是代理类,代理类持有目标对象:

public class Broker implements SuperStar{
	
	private RealStar realStar;
	
	public Broker(){
		this.realStar = new RealStar();
	}

	@Override
	public void action() {
		askPrice();
		realStar.action();
		handleEnd();
	}
	
	private void askPrice(){
		System.out.println("经纪人开始谈出场费");
	}
	
	private void handleEnd(){
		System.out.println("经纪人开始处理收尾工作");
	}

}

测试代码如下:

public class CustomerTest {

	public static void main(String[] args) {
		Broker broker = new Broker();
		broker.action();
	}
}

执行测试代码,得到如下结果:

经纪人开始谈出场费
大明星要开始表演了!!!
经纪人开始处理收尾工作

对于消费者来讲,其实不知道有目标类的存在,因为我们只是和代理类打交道,但是action方法却是由目标类进行执行的,只不过是由代理类去调用的。如果经纪人价格没谈好,那么目标对象的方法也不会执行了,对目标方法进行了控制。

© 著作权归作者所有

M
粉丝 3
博文 22
码字总数 12905
作品 0
浦东
程序员
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
设计模式学习笔记之-代理模式

代理模式中,客户不会直接调用目标对象而是通过一个代码对象,客户调用代理对象代理对象去调用目标对象,起到对象与对象间的隔离作用。有时候我么不想直接访问目标对象,有时候我们不能直接访...

申文波
2018/03/05
0
0
JavaScript 中常见设计模式-代理模式

     代理模式   情景:小明追女生 A   非代理模式:小明 =花=> 女生A   代理模式:小明 =花=> 让女生A的好友B帮忙 =花=> 女生A   代理模式的特点   代理对象和本体对象具有一...

webstack前端栈
2018/06/15
0
0
移动开发之设计模式- 代理模式(IOS&Android)

资源 完全参照 代理模式|菜鸟教程但不包括IOS代码 代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有...

FlanneryZJ
2018/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
43分钟前
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
59分钟前
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0
聊聊Elasticsearch的FsProbe

序 本文主要研究一下Elasticsearch的FsProbe FsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java public class FsProbe { private static f......

go4it
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部