设计模式之代理模式
代理模式,分为静态代理模式和动态代理模式。今天我们来说说静态代理模式。
静态代理模式有三个特点:
- 代理者和被代理者实现同一个接口;
- 代理者一般会持有一个被代理者对象;
- 代理者只做自己关心的事,不关心的交给被代理者做;
工作是生产汽车和销售汽车。于是,汽车公司的接口为:
package com.java.proxypattern; public interface CarFactory {//汽车公司 public void productCar();//生产汽车 public void sell();//销售汽车 }
福特公司是汽车公司的一个类,于是:
1 package com.java.proxypattern; 2 3 public class Ford implements CarFactory{ 4 5 @Override 6 public void productCar() { 7 System.out.println("福特--生产汽车"); 8 } 9 10 @Override 11 public void sell() { 12 System.out.println("福特--销售汽车"); 13 } 14 15 }
而福特汽车只能在福特汽车卖车都是通过4S店来销售汽车,这里4S店就是我们所说的代理:
1 package com.java.proxypattern; 2 3 public class CarProxy implements CarFactory{ 4 5 private CarFactory carFactory=null; 6 7 public CarProxy(CarFactory carFactory){ 8 this.carFactory = carFactory; 9 } 10 11 @Override 12 public void productCar() { 13 carFactory.productCar(); 14 } 15 16 @Override 17 public void sell() { 18 carFactory.sell(); 19 System.out.println("福特卖给我 我高价转卖"); 20 } 21 22 }
在这种模式下,福特汽车既不用去过多的参与到全球的销售中去,4S店又可以从中赚取差价。win-win。这就是一种简单的代理模式。
我们可以写一个main函数测试一下;
1 package com.java.proxypattern; 2 3 public class Test { 4 public static void main(String[] args) { 5 /*CarProxy carProxy=new CarProxy(new Ford()); 6 carProxy.productCar(); 7 carProxy.sell();*/ 8 9 Ford ford = new Ford(); 10 ford.productCar(); 11 ford.sell(); 12 } 13 }
总结一下我的理解,代理模式就是在被代理者的行为基础上,加入一些多出的行为,甚至完全替换原有的行为。
PS.感觉使用的例子不是很贴切,类的关系也用的不太对,每天都是进步,坚持!