首页 > 编程语言 > 详细

java设计模式-代理模式

时间:2019-05-15 18:43:11      阅读:115      评论:0      收藏:0      [点我收藏+]

模式导读:

    随着时代的发展,社会的进步,思想的提升,我们的世界变得更加的多元化。明星众所周知是一个比较时尚,fashion的职业,他们或唱歌,或跳舞,或文武双全,但他们也有可能会像一个普通员工一样一天忙不完的事情,所以出现了经纪人这个字眼,由他们去负责一些被代理角色不必要的工作,减轻他们的负担。这便是代理角色在生活中最经典的例子。

分类:
1.静态代理:静态定义代理类
2.动态代理:动态生成代理类

参考类图:

技术分享图片

1.抽象角色:定义代理角色和抽象角色的公共对外方法。
2.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用,关注真正的业务逻辑。
3.代理角色:实现抽象角色,是真正角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作,将统一的流程控制放到代理角色中处理。

代码实现:

1.抽象角色

1 package com.etc;
2 
3 public interface AbstractSinger {
4     //抽象角色的操作
5     void sing();
6 }

2.真实角色

 1 package com.etc;
 2 
 3 public class Singer implements AbstractSinger {
 4 
 5     private String name;
 6     private int age;
 7 
 8     public Singer(String name, int age) {
 9         super();
10         this.name = name;
11         this.age = age;
12     }
13     
14     public Singer() {
15         super();
16     }
17 
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public int getAge() {
25         return age;
26     }
27     public void setAge(int age) {
28         this.age = age;
29     }
30     //歌手的具体操作
31     public void sing() {
32         System.out.println(age+"岁的歌手"+name+"正在演唱歌曲!");
33     }
34 }

3.代理角色

 1 package com.etc;
 2 /*设置一个代理角色
 3  * 通过代理控制对对象的访问,
 4  * 可以详细的控制访问某个类或对象的方法,
 5  * 在调用这个方法前做前置处理,
 6  * 调用这个方法后做后置处理
 7 */
 8 public class Proxy  {
 9     //保持对被代理角色的引用
10     Singer singer;
11     //代理者角色自身的方法plan()
12     public static void plan() {
13         System.out.println("-->代理员计划好歌手的行程!");
14     }
15     //代理者角色自身的方法startSing()
16     public static void startSing() {
17         System.out.println("-->代理员处理好歌手唱歌前的准备工作!");
18     }
19     //代理者角色自身的方法overSing()
20     public static void overSing() {
21         System.out.println("-->代理员处理好歌手唱歌后的结束工作!");
22     }
23     
24     //真正代理后实现流程操作
25     public void toProxy(Singer singer) {
26         plan();
27         startSing();
28         singer.sing();
29         overSing();
30     }
31 }

4.客户端类

 1 package com.etc;
 2 
 3 public class Client {
 4 
 5     public static void main(String[] args) {
 6         
 7         Singer singer=new Singer("周杰伦",25);
 8         Proxy p=new Proxy();
 9         //代理后具体的流程实现
10         p.toProxy(singer);
11 
12     }
13 
14 }

效果截图:

技术分享图片

代理模式优缺点:

优点:

1、职责清晰。
2、高扩展性。
3、智能化。

缺点:

1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

适用场景:

1、远程代理。
2、虚拟代理。
3、Copy-on-Write 代理。
4、保护(Protect or Access)代理。
5、Cache代理。
6、防火墙(Firewall)代理。
7、同步化(Synchronization)代理。
8、智能引用(Smart Reference)代理。

 

java设计模式-代理模式

原文:https://www.cnblogs.com/weekstart/p/10871285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!