代理模式

代理模式 通过代理类来添加新的功能
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、本质的区别我个人认为装饰模式是添加新的功能,装饰模式的装饰类都是一个个新功能。而且代理模式的代理类完全是一个新的身份。说通俗点就是,比如这个例子中的学生类,如果要打官司,装饰模式的就是给与这个学生一个打官司的方法,本质上还是由这个学生去打官司,而且代理模式是找一个律师来帮助学生打官司。

你可能感兴趣的:(设计模式,代理模式)