【摘要】:以书店代理卖书为例,演示静态代理。步骤1:在chapter12项目src目录下新建cn.linaw.chapter12.demo02包,在包里定义一个代理主题角色和真实主题角色共同的服务接口SellDao,接口中定义卖书抽象方法sell()。比较客户端不使用静态代理模式和使用静态代理模式卖书的效果。图12-11静态代理对比测试静态代理需要为每一个服务创建一个代理类,当服务多时则工作量大且不易管理,一旦接口内容发生改变,则真实主题类与代理主题类都需要修改。
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同的父类,代理对象通过调用相同的方法来调用真实主题对象的方法。
【例12-5】
以书店代理卖书为例,演示静态代理。
步骤1:在chapter12项目src目录下新建cn.linaw.chapter12.demo02包,在包里定义一个代理主题角色和真实主题角色共同的服务接口SellDao,接口中定义卖书抽象方法sell()。图12-8所示为SellDao接口。
图12-8 抽象主题角色接口
步骤2:真实主题角色(即出版社)对接口的实现即图12-9所示的RealSubject类。
图12-9 真实主题角色对服务接口的实现(www.xing528.com)
代理主题角色(即书店)对接口的实现即图12-10所示的Proxy类。
图12-10 代理主题角色对服务接口的实现
可见,代理主题角色对接口的实现中,除了调用了被代理的真实主题对象的方法外,代理主题对象还做了额外的工作,例如办理会员卡和赠送积分。在不破坏真实主题代码的前提下,通过代理模式扩展了程序功能。
步骤3:编写测试用例。比较客户端不使用静态代理模式和使用静态代理模式卖书的效果。StaticProxy Test测试类的源代码如图12-11所示。
图12-11 静态代理对比测试
静态代理需要为每一个服务创建一个代理类,当服务多时则工作量大且不易管理,一旦接口内容发生改变,则真实主题类与代理主题类都需要修改。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。