zoukankan      html  css  js  c++  java
  • 设计模式之代理模式

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

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

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

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

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

  • 相关阅读:
    存储过程 游标 有用
    Spring框架IOC容器和AOP解析 非常 有用
    业务逻辑;完成根据自动分单结果来决定进行的相关业务处理
    业务逻辑:完成基于分区关键字匹配的自动分单业务逻辑
    业务逻辑:完成基于CRM地址完全匹配的自动分单业务逻辑
    业务逻辑:完成客户下单后前台系统的数据处理并调用后台系统服务处理业务 webservice接口调用 有用
    Spring IOC 少
    Spring IOC 巨多 非常 有用
    Spring ioc
    LeetCode -- Remove Element
  • 原文地址:https://www.cnblogs.com/loveyejinhui/p/8698627.html
Copyright © 2011-2022 走看看