静态代理设计思想
总体思想,通过传递一个被代理类的对象到代理类构造器中的参数,来决定代理类
去代理哪个被代理类
.
代理一个被代理类就是把被代理类的对象传到 代理类的构造器中
,然后去调用已经实现接口中的哪些方法.
需要一个接口,定义一些方法.
然后有好几个被代理类去实现接口中的这些方法,接着有一个代理类也去实现这些方法,
只不过代理类的实现过程是直接调用被代理类中实现好的方法.
举个很形象的例子,就比如你要去XX品牌专卖店买个东西,然后当你和店员谈好价格准备拿货时
老板说哎呀我这里暂时没货,明天我去厂子里给你拿一个之类的话.
老板就好比代理类,具体生产某品牌的商品的厂子就好比是个被代理类.
接口的作用,接口一直都是起到一个定义的作用!就是定义一些必须的操作,让具体的类去实现它.
这就像是说上司给你安排任务,具体怎么做他不管,他关心的是你有没有完成这个任务.
具体看下面的代码和注释,举了个故事情景的例子方便理解.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
interface MouseProducers {
void produceMouse(); }
class RazerMouseProducers implements MouseProducers {
@Override public void produceMouse() { System.out.println("我是雷蛇鼠标生产商."); } }
class LogitMouseProducers implements MouseProducers {
@Override public void produceMouse() { System.out.println("我是罗技鼠标生产商."); } }
class MouseStore implements MouseProducers {
private MouseProducers mouseProducers;
public MouseStore(MouseProducers mouseProducers) { this.mouseProducers = mouseProducers; }
@Override public void produceMouse() { mouseProducers.produceMouse(); }
}
public class StaticProxyModelTest {
public static void main(String[] args) {
MouseProducers mp_1 = new RazerMouseProducers(); MouseStore mouseStore_1 = new MouseStore(mp_1); mouseStore_1.produceMouse();
MouseProducers mp_2 = new LogitMouseProducers(); MouseStore mouseStore_2 = new MouseStore(mp_2); mouseStore_2.produceMouse();
} }
|