00:00
说完了装饰者设计模式。我们不得不提的。就是代理设计模式。因为很多人区分区分不开这个静态,这个代理设计模式和装饰的设计模式,当然这个区分不开的主要就是静态代理,静态代理设计模式和装饰者设计模式。非常的相似。那么下边我们就写这样一个代码,对比一下啊。我这。来一个。啊。来一个。Java。这样啊,我这个对比和谁对比呢?和这个。装饰着设计模式。那个基本。
01:03
基本使用方式进行对比,所以我这样我这个工程我就起名叫零八。静态代理。Static proxy,我就叫零八了啊。嗯。那就这了,直接finish,让他俩挨一块儿啊,你看着。这里边儿。这都不变。啊,或者这样吧,我们光拷贝它吧。也是我这个。右轮接口摸方法这都不变。这都不变啊,现在我要变的是谁呢?我这儿要来一个代理类。
02:01
来一个代理。Class,你看着它有什么?和那个写的时候有什么区别啊proxy。这个叫什么?Some surface pro。他这个代理嘞,也要实现。这个业务接口。I some service。哎。我们那个装饰的设计模式是不是也实现?这个装置者是不是也要实现这个业务接口啊,OK一样。代理是干嘛的?你注意代理是干嘛的,代理可以增强我们的目标类,那你要增强它怎么增强?
03:00
当然。这里边儿也需要声明什么。目标对象。这个目标对象怎么来的?你注意了,这是它不同的地方。目标对象。他,我new出来的,我knew了个some surface。注意。不写这。在午餐。构造器中创建目标对象。紧接着呢,紧接着这个好说了,他点。
04:06
Do some,第二。To upper case,好,写完了。这是什么?这是静态代理类。紧接着写测试类吧。测试类,这样测试类我也拷贝它了。拷贝他,我就把他删了。Service这个service啊,你注意我这个service就不是用了,用谁proxy。OK啦,就这。直接运行。出来了吧。
05:01
哎,这个这个和那个不是一样吗?你看看。这个和decorate一样,不一样。这不实现了。业务接口。这不,有目标对象。对不对,这不目标对象是不是一样的。你注意啊,这就是容易混淆的地方。他们两个是不一样的。我写一下他们的。这个是啊,静态代理类与与这个。那个叫什么呀,叫装饰者。答。真的,咱们先说共同点。
06:02
说完共同点了。咱们再说它们两个的区别。共同点。第一个。都要。实现。是不是?都要实现与目标。类相同的业务接口,这没问题吧,第二个。是不是?都要声明。目标对象在哪啊?这两个类中是不是都要声明目标对象啊?
07:08
第三个都可以在不修改目标类的前提下增强目标。目标类向目标对象。增强。目标方法吧。是不是?这是他们的共同点。那区别又是什么呢?区别。首先,目的不同。目的不同。这是第一个。
08:03
这个我们先写它吧。大家熟悉装饰者。装饰者的使用目的。是。肇事者的使用目的是什么?就是增强目标对象,很简单,就是为了增强目标对象,他的目的就是增强。而静态代理。的使用目的,他是什么?他不是为了增强。是为了?保护。和隐藏。目标对象。他为了保护和隐藏目标对象,什么意思?你看看在你的测试类里边,你能不能看到。
09:12
你的目标对象是谁?看不到你只能使用代理。你只能使用这个代理。你不知道你的目标对象是谁?所以就把目标对象给堡起来了,这样的话我们就可以怎么样,这个代理类里边可以有些方法你能用,有些方法不能用。你不能用的方法,我就可以给你保护起来呀。比如说简单咱们写一下啊,你看这目标方法,这有一个吧,再来个目标方法,比如这个叫do other。
10:02
Do other。这个这个do other,比如它返回值。是。是什么?Abcde是吧?FGHIJK,不是这个。它也实现了呀,但是你注意我的这个other。对于你这个普通用户,这个test这个普通用户不能用。怎么办呢?我就可以给你加上这样一句话。对不起。年无。权使用。那你这儿要使用,你非得用。
11:02
你这非得用好点,Do other。Result。我输出。A result。你看是不是无权使用啊。有哥们说了,那那你写的这不好,那不是谁访问都是无权使用,那不是啊,我这儿可能是不是这有代码呀。啊,你满足什么条件的啊,你谁能用谁不能用,怎么怎么样是不是。我通过这个代理就可以进行控制。可以进行权限的控制。这样的话就保了。
12:02
保护和隐藏了我们的目标对象。这是第一个不同,使用目的不同,那么由于这一点使用目的不同,所以我们的用法。对于。目标对象的声明。创建。获取方式不同。装饰着。类中目标对象的获取。通过什么?通过代餐构造器?传入你看看。
13:05
通过代餐构造器传进来,这是测试类啊。测出来就是用户啊,用户这儿是不是可以看到目标对象啊,我创建了目标对象,然后把目标对象这个参数我传递给这个decorator。我传递给他。所以这个是什么,是通过戴森高系传进来的?而。我们的代理呢?静态代理是为了保护和隐藏目标对象,所以你不能是用户传进来的呀。我是直接给你创建好的。在无参构造器中直接创建。
14:04
诶,这是目标对象获取方式,它是不一样的。OK啦。看看还有什么区别没有?有没有了。还有一个啊,你看看这里边也可以写上吧。就是。啊,那这这个应该怎么总结呢。这个是什么不同?嗯。咱们就不写这个这个点了,就直接写了啊这个。啊。这样写吧。父赖于。
15:05
这样,嗯。功能增强的实现者。不同,诶这样写。哎呀。装饰着。设计模式中。存在什么?存在装饰者积累,其并不真正实现。增强。而是由。具体的装饰着。
16:03
进行功能。增强的。不错吧?所以它里边。所以。存在一个什么叫装饰者量的概念。它这存在这样一个概念。而。静态代理设计模式。中。不存在。父子类的关系一般吧,我们是。
17:02
一般啊,不存在父子类的关系。具体的。增强就是有。代理类完成。无需其子类完成。所以。不存在。链的概念,哎,它里边没有链这样一个概念。OK了,这是什么?我们说的静态代理。设计模式和装饰者设计模式。这两个非常容易混淆啊,主要区别其实最根本,我们在用的时候,最主要的区别就是就这。
18:01
这个目标对象是怎么来的?哎,你得理解了他们的本质目标,或者说他们的使用目的是不一样的,理解这个竞赛里是干嘛的,保护和隐藏目标对象的,知道这个就OK了。
我来说两句