代理模式 通过代理类来添加新的功能
1、代理接口
2、被代理类A
3、代理类B
4、具体调用
代理模式是一个很简单的设计模式,平时也用的比较多。尤其是在AOP中,现在说下代理模式与装饰模式的不同
先说下相同
1、都是为原始类增加功能。
不同点
1、代理类在具体的调用方不需要知道任何带被代理方A的消息,完全屏蔽了被代理与调用方的接口,而且装饰模式调用是需要把被装饰方传入的。
2、代理模式可以在代理类内部判断逻辑来控制被代理方的行为,而且装饰模式不允许。
3、本质的区别我个人认为装饰模式是添加新的功能,装饰模式的装饰类都是一个个新功能。而且代理模式的代理类完全是一个新的身份。说通俗点就是,比如这个例子中的学生类,如果要打官司,装饰模式的就是给与这个学生一个打官司的方法,本质上还是由这个学生去打官司,而且代理模式是找一个律师来帮助学生打官司。
1、代理接口
public class Student implements Person {
@Override
public void talk() {
System.out.println("talking");
}
}
2、被代理类A
public interface Person {
void talk();
}
3、代理类B
public class Lawyer implements Person {
private Person person;
@Override
public void talk() {
person = new Student();
person.talk();
System.out.println("negotiationing");
}
}
4、具体调用
public class Main {
public static void main(String[] args) {
Person person = new Lawyer();
person.talk();
}
}
代理模式是一个很简单的设计模式,平时也用的比较多。尤其是在AOP中,现在说下代理模式与装饰模式的不同
先说下相同
1、都是为原始类增加功能。
不同点
1、代理类在具体的调用方不需要知道任何带被代理方A的消息,完全屏蔽了被代理与调用方的接口,而且装饰模式调用是需要把被装饰方传入的。
2、代理模式可以在代理类内部判断逻辑来控制被代理方的行为,而且装饰模式不允许。
3、本质的区别我个人认为装饰模式是添加新的功能,装饰模式的装饰类都是一个个新功能。而且代理模式的代理类完全是一个新的身份。说通俗点就是,比如这个例子中的学生类,如果要打官司,装饰模式的就是给与这个学生一个打官司的方法,本质上还是由这个学生去打官司,而且代理模式是找一个律师来帮助学生打官司。