设计模式之代理模式

  代理模式,分为静态代理模式和动态代理模式。今天我们来说说静态代理模式。

  静态代理模式有三个特点:

  •   代理者和被代理者实现同一个接口;
  •   代理者一般会持有一个被代理者对象;
  •   代理者只做自己关心的事,不关心的交给被代理者做;

工作是生产汽车和销售汽车。于是,汽车公司的接口为:

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.感觉使用的例子不是很贴切,类的关系也用的不太对,每天都是进步,坚持!

原文地址:https://www.cnblogs.com/loveyejinhui/p/8698627.html