网站首页 > java教程 正文
1 代理的作用
代理模式是常用的Java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
2 代理模式的例子
假设有一个Italk接口,有空的方法talk(说话),所有的Person对象都实现(implements)这个接口,实现talk方法,程序有很多地方都将Person实例化,执行talk方法,后来发现程序里有一些除了要说话以外还要唱歌(sing),那么我们既不能在Italk接口里增加sing()方法,又不能在每个Person对象都增加sing方法,我们只有增加一个代理类TalkProxy,这个代理类里实现talk和sing方法,然后在需要sing方法的地方调用代理类即可,代码如下:
2.1 接口类Italk
public interface Italk
{
public void talk(String msg);
}
2.2 委托类Person
public class Person implements Italk
{
public String name;
public String age;
public Person(String name, String age)
{
this.name = name;
this.age = age;
}
public void talk(String msg)
{
System.out.println(msg + "! 大家好, 我是 " + name + ", 我年龄是 " + age);
}
}
2.3 代理类TalkProxy
public class TalkProxy implements Italk
{
private Italk talker;
public TalkProxy(Italk talker)
{
this.talker = talker;
}
public void talk(String msg)
{
talker.talk(msg);
}
public void talk(String msg, String singname)
{
talker.talk(msg);
sing(singname);
}
private void sing(String singname)
{
System.out.println("歌的名字是:" + singname);
}
}
2.4 测试类:
public class Test
{
public static void main(String[] args)
{
Italk person = new Person("张三", "20");
person.talk("hi");
System.err.println(">>>>>>>>>>>>>>>");
TalkProxy talker = new TalkProxy(person);
talker.talk("hi", "<<歌唱祖国>>");
}
}
2.5 代码分析
代理分为静态代理和动态代理,上面的例子是静态代理,后面的文章我会再写一下关于动态代理,以及使用ASM生成代理类的例子。
欢迎大家关注【Java人生】。关注Java,关注人生。关注Java的魅力,关注人生的多彩!
猜你喜欢
- 2024-10-24 Java动态代理与静态代理以及它能为我们做什么
- 2024-10-24 Java 设计模式 之 代理模式 (1)(java设计模式之代理模式)
- 2024-10-24 Java设计模式:代理模式 vs. 装饰模式
- 2024-10-24 设计模式篇——代理模式详解(面试再问你代理模式,这么回答他)
- 2024-10-24 动态代理大揭秘,带你彻底弄清楚动态代理
- 2024-10-24 面试:Java的代理模式动态代理和静态代理区别,aop用的什么代理
- 2024-10-24 Java设计模式之代理模式(java代理类是什么)
- 2024-10-24 JAVA设计模式——代理模式(java编写代理服务)
- 2024-10-24 23种java设计模式之:门面模式、享元模式、代理模式
- 2024-10-24 Java 17中的动态代理:实现灵活的代理模式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)