• 设计模式之代理模式


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

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

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

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

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

  • 相关阅读:
    django全文搜索学习心得(一)haystack 篇
    django request get_full_path 中文问题
    django全文搜索学习心得(五) whoosh 精简版
    django全文搜索学习心得(二)solr 篇
    django全文搜索学习心得(四)sphinx篇
    模拟队列
    差分
    模拟栈
    区间合并
    离散化
  • 原文地址:https://www.cnblogs.com/loveyejinhui/p/8698627.html
Copyright © 2020-2023  润新知