以语言演示代理模式
package proxy;
public interface People {
void speak();
}
package proxy;
public class Chinese implements People{
@Override
public void speak() {
System.out.println("说中文");
}
}
package proxy;
public class English implements People{
@Override
public void speak() {
System.out.println("说英文");
}
}
package proxy;
public class PeopleProxy {
People people;
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
public void speak() {
people.speak();
System.out.println("proxy附加");
}
}
package proxy;
public class ProxyTest {
public static void main(String[] args) {
PeopleProxy peopleProxy=new PeopleProxy();
People chinese=new Chinese();
peopleProxy.setPeople(chinese);
peopleProxy.speak();
People english=new English();
peopleProxy.setPeople(english);
peopleProxy.speak();
}
}
打印结果:
说中文
proxy附加
说英文
proxy附加
小结:
1.代理模式与装饰器模式的区别:
代理模式更侧重于代理与被代理的关系,权限;
装饰器模式更侧重于原有类功能的扩展。
装饰器模式
2.静态代理与动态代理:
动态代理