设计模式 (代理模式初探)

一.代理:

1.首先明白一下什么是代理?

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。
即:
在这里插入图片描述
说白了就是这件事客户本身不做,找代理人做,然后代理人不仅可以完成客户需求的功能,还能完成一些附加功能。

二.代理模式:

1.代理模式的三个要素:
  • 接口:约定了该服务提供的能力或者功能,比如生产厂商,规定该厂商应该生产哪些产品。
  • 真实对象:实现了改接口,具有改接口的真实的方法。
  • 代理对象:帮忙代购的代理人。
2.代理模式类图:

在这里插入图片描述
张三通过代理人间接买到了想要买到的海外商品。并且代理人可以额外追加商品包装和售后服务的功能

3.代码举例:

1.首先定义一个接口:我们这里定义一个电脑厂家接口:
在这里插入图片描述
2.定义一个真实对象:我们这里定义一个生产MacBook的厂商,实现了电脑厂家接口
在这里插入图片描述
3.定义一个代理对象ProxyBean
增加额外功能,将生产出来的电脑进行包装和售后服务。
在这里插入图片描述
4.测试:
在这里插入图片描述
5.运行结果:
在这里插入图片描述

结论:根据代码可以得出一个这样的结论,代理(ProxyBean对象)可以不用通过改变真实对象(MacBookFactory)中的方法,而是通过额外追加的方法来增强真实对象的功能

4.总结:

对于上面写的代码,我们做出以下总结:

  • 首先,我们需要创建一个接口,规定一些规则(方法)。
  • 其次,我们需要创建一个实现了该接口的实现类,该类即上文所说的真实类,重写了接口所规定的方法。
  • 最后,我们需要创建实现了该接口的代理类,该代理类属性必须是所实现的接口,并且带有该接口为参数的构造器和重写该接口的方法,写具体逻辑。该代理类还可以增加额外的方法。
5.思考该代码存在的问题

比如现又有新的客户要买一部手机,他找到了代理对象,想要代理对象为他去海外代购一部iphone12.此时该怎么办?
我们来看代码:
1.首先,按照上面的总结,我们得定义一个手机工厂接口。
在这里插入图片描述
2.然后定义真实类。去实现手机工厂接口,并重写其方法。
在这里插入图片描述
3.最后在已有的代理类上实现手机工厂接口,重写其方法,增加一个属性,手机接口,增加一个构造方法:实现手机工厂接口的类的对象进行初始化。

在这里插入图片描述
在这里插入图片描述
此代理类也可以提供相应的售后服务。
在这里插入图片描述
看着很完美,代理对象有一次完成了一个新客户的代理,但是,如果代理对象业务骤增,突然出现很多客户,每个客户需求都不一样,有的客户需要海外的美酒,有的需要雪茄烟,有的需要化妆品…
这代理对象便要实现酒接口,烟接口,化妆品接口,然后对继续添加相应的属性和构造器,并且重写这些接口所规定的方法。

这个代码存在问题!

为什么这么说呢:
我们继续看代码:
比如客户的需求发生了改变。客户想要买大容量的手机。那么我们就得修改手机工厂接口。
在这里插入图片描述
保存后,发现:
报错!报错!!!
在这里插入图片描述
在这里插入图片描述
凡是实现它的类全都报错,很明显,因为接口中的方法发生了改变。自然它的实现类也要改变。
然后就陷入了又要修改实现类的代码,很繁琐,很难受!!!

这需要不断的修改源码,使得代码的可维护型变得相当差,违背了开闭原则

以上代码其实就是静态代理,这时代码出现了不足,需要改进,那么如何改进,请看下回:浅谈动态代理

つづく

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值