java设计模式之代理模式
来源:互联网 发布:python 源码安装包 编辑:程序博客网 时间:2024/05/01 21:05
代理模式是结构型模式中的一种,代理模式顾名思义就是我现在太忙了,如果要使用我的功能就去找我的代理,代理知道我会什么,你告诉代理,代理再告诉我,由我来做最后的操作,所以代理和我得实现相同的接口。代理模式一般应用于扩展某个已经实现的类的功能(这符合开闭原则:对扩展开放,对修改关闭”)。
先写一个代理人和被代理人都要实现的接口,我们假定被代理人为一个歌手,歌手的代理则为其经纪人,他们都要实现的接口则为工作接口。
public interface Work {/** * 工作就是要唱歌 */public void Sing();}
public class Singer implements Work {/** * 歌手唱歌 */@Overridepublic void Sing() {System.out.println("歌手唱歌");}}
public class Agent implements Work {Work singer;public Agent(){singer = new Singer();}public Agent(Work worker){singer = worker;}@Overridepublic void Sing() {getWorkforSinger();singer.Sing();}private void getWorkforSinger(){System.out.println("帮歌手接活");}}最后写一个测试类
public class Test {public static void main(String[] args) {Work worker = new Agent();worker.Sing();}}
注意上面的Agent类,也就是代理类,其中有一个构造函数的参数是Work接口,也就是说这个经纪人有点吊还可以接私活,可以替其他歌手接活干,我们再来写另一个歌手类
public class AnotherSinger implements Work {@Overridepublic void Sing() {System.out.println("另一个歌手唱歌!!");}}
实现类则可以这样使用
public class Test {public static void main(String[] args) {/*Work worker = new Agent();worker.Sing();*/Work worker = new Agent(new AnotherSinger());worker.Sing();}}
讲到这里应该是已经了解了代理模式,这时候再来联想一下上一篇讲的策略模式的第一种实现方式有点像,策略模式的辅助类和代理模式的代理类都接受一个我们实现的接口,然后对其进行功能扩展,唯一的区别只在于代理类也得实现接口,那么问题来了,为什么一个是行为型模式而一个是结构型模式,区别如下:
代理模式中,代理类知道被代理类的行为,因为代理类与被代理类实现的是同一个接口,因此代理类与被代理类的结构是相同的,之所以启用代理是为了对其他对象提供一种代理以控制对这个对象的访问(不管你是加一个限制还是要怎么样)。
而策略模式中,策略容器并不知道内部策略的详细信息,因为容器并没有实现与内部策略相同的接口,即容器与内部策略只是简单的组合关系,容器只是将内部策略的行为抽取出来,进行了统一的实现。
0 0
- Java设计模式之代理设计模式
- Java设计模式之代理
- Java设计模式之代理
- java设计模式之代理
- java之代理设计模式
- java之代理设计模式
- Java设计模式之代理模式
- Java设计模式之计数代理模式
- JAVA设计模式之代理模式
- JAVA设计模式之代理模式
- java设计模式之代理模式
- Java 设计模式 之 代理模式
- java设计模式之代理模式Proxy
- 设计模式之代理模式 java (1)
- java设计模式之代理模式
- java设计模式之静态代理模式
- Java:设计模式之代理模式Proxy
- java设计模式之代理模式
- javascript 中的console.log有什么作用啊?是做什么的呢?谢谢大家
- day18:RDD持久化、广播、累加器
- 64位ubuntu编译32位程序
- 在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系
- 利用postmessage间接实现iframe跨域调用父页面js函数
- java设计模式之代理模式
- QHD/qHD/FHD等LCD基础分辨率知识普及
- Fragment 刷新界面
- mabatis 中出现< 以及> 代表什么意思?
- 调整tabbarItem字体的大小
- java 利用jacob将word转换成PDF
- EXT中常用方法
- 用nginx图片缓存服务器
- 初识BeeFramework