您的位置:首页 > 其它

设计模式之代理模式(Proxy)

2011-11-25 14:44 260 查看

1.场景

在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不使用分页,方便他们进行业务处理。在显示全部员工的时候, 只需要显示姓名即可,但是也需要提供如下功能:在必要的时候可以选择并查看某位员工的详细信息(user表中的所有字段)。

实现起来也非常简单,只需要查询对应deptid下的user表就可以了(这样进行的查询是全表查询,也就是会查询表中的所有字段)。但是实现看似简单,功能也正确,但是蕴涵了一个比较大的问题。那就是,一次性访问的数据条数过多,而且每条描述的数据量又很大,这样操作将会消耗较多的内存。而从用户的角度来说,有很大的随机性。客户有可能访问每一条客户端详细信息,也有可能一条都不访问。也就是说,一次性访问很多条数据,消耗了大量内存,但是消耗的内存很有可能是浪费掉的。客户有可能根本就不会去访问那么多数据,对于每条数据,客户只需要查看姓名而已。

那么该怎么实现,才能既把用户数据的姓名显示出来,而又能节省内存空间?当然还要实现在客户想要看到更多数据的时候,能够正确访问到数据呢?这就是我们接下来要讲的代理模式。

2.解决方案

2.1.代理模式的定义

为其他对象提供一种代理以控制对这个对象的访问。

2.2.代理模式的结构和说明

View Code

DROP TABLE IF EXISTS `tbl_dept`;
CREATE TABLE `tbl_dept` (
`deptid` varchar(20) NOT NULL DEFAULT '',
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tbl_dept
-- ----------------------------
INSERT INTO tbl_dept VALUES ('01', '总公司');
INSERT INTO tbl_dept VALUES ('0101', '一分公司');
INSERT INTO tbl_dept VALUES ('010101', '开发部');
INSERT INTO tbl_dept VALUES ('010102', '测试部');
INSERT INTO tbl_dept VALUES ('0102', '二分公司');
INSERT INTO tbl_dept VALUES ('010201', '开发部');
INSERT INTO tbl_dept VALUES ('010202', '客服部');


代码实例的类图结构如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: