一.代理模式定义
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。(来自百度百科)
二.代理模式详解
代理模式顾名思义就是一个类代理其他类的行为,但是真正实现的又是被代理类,举个例子:现在好多人做代理,什么包包啦、香水啦、化妆品啦等等。
假设小明个人兼职三个商品的代理A,B,C,我们都知道商品的定价,发货都是由卖家亲自操作的,小明只是卖家和客户之间的媒介。这里小明就是代理类,他进行的发货、定价实际都是由最后的商家进行的。A、B、C就是被代理类。
三.代码详解
1.公共接口
package com.test.proxy;
public interface Star {
public void business();
public void price();
}
2.实现类
=======被代理类1=======
package com.test.proxy;
public class Gyy implements Star{
@Override
public void business() {
// TODO Auto-generated method stub
System.out.println("Gyy 在谈生意");
}
@Override
public void price() {
// TODO Auto-generated method stub
System.out.println("Gyy 拍戏价格");
}
}
=======被代理类2=======
package com.test.proxy;
public class Zbz implements Star{
@Override
public void business() {
// TODO Auto-generated method stub
System.out.println("Zbz 在谈生意");
}
@Override
public void price() {
// TODO Auto-generated method stub
System.out.println("Zbz 拍戏价格");
}
}
=======代理类==========
package com.test.proxy;
public class Agent implements Star {
private Star star;
public Agent(Star star){
this.star = star;
}
@Override
public void business() {
// TODO Auto-generated method stub
star.business();
}
@Override
public void price() {
// TODO Auto-generated method stub
star.price();
}
}
=======输出结果=====
package com.test.proxy;
public class Test {
public static void main(String[] args) {
Agent agent1 = new Agent(new Gyy());
agent1.business();
agent1.price();
Agent agent2 = new Agent(new Zbz());
agent2.business();
agent2.price();
}
}