相同点:
(1) 装饰者类与代理类都需要实现目标类所实现的接口
(2) 装饰者类与代理类中都需要声明目标类对象,目的是这些类中都需要调用目标对象的目标方法
(3) 装饰者类与代理类都可以在不改变目标类的前提下对目标对象进行增强
不同点:
(1) 目的不同:装饰者类的目的就是为了增强目标类;静态代理类的目的是为了保护和隐藏目标对象。
(2) 装饰者类与代理类中都需要声明目标类对象,但对于目标对象的创建方式不同。装饰者类是由带参构造器传入的;代理类中的目标对象,是在无参构造器中直接创建的。
(3) 测试类中,装饰者模式,需要先创建一个目标类对象,再将其通过带参构造器传给装饰者类;代理模式,测试类直接创建代理类对象,测试类根本就看不到业务接口的真正的实现类是谁。
(4) 装饰者类一般不具体增强目标类,而是由具体的装饰者子类进行的增强,并且可以形成“装饰者链”;静态代理类,则是具体的增强的实现,所有的增强功能,一般都是在静态代理类中完成的。
时间: 2024-10-07 04:24:12