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

    1 静态代理

    静态代理:这个比较简单,

    总体上来说就是通过实现接口的形式来实现的。

    比如一个接口Icar,这个接口有run()方法,Car这个类实现了Icar这个方法,但是现在由于某种原因不能够修改Car这个类,且要在Car这个类执行run()方法的前后记下日期,那么这种场景就可以使用代理模式实现这个场景的需求。具体代码如下:

    ICar:

    1 package com.wyl.bean;
    2 
    3 public interface ICar {
    4     public void run();
    5 }

    Car:

     1 package com.wyl.bean;
     2 /**
     3  * Car实现ICar接口的run()方法..
     4  * @author Wei
     5  *
     6  */
     7 public class Car implements ICar{
     8     public String name;
     9     public Car(String name){
    10         this.name = name;
    11     }
    12     @Override
    13     public void run() {
    14         // TODO Auto-generated method stub
    15         System.out.println(name+"Car开始run...");
    16     }
    17     
    18 }

    StaticProxyCar,静态代理类

     1 package com.wyl.bean;
     2 
     3 /**
     4  * 静态代理,此例中代理的是Car这个类,而Car实现的是ICar这个接口, 
     5  * 所以该代理类也要实现ICar这个接口
     6  * @author Wei
     7  */
     8 public class StaticProxyCar implements ICar {
     9     ICar car;
    10 
    11     public StaticProxyCar(Car car) {
    12         this.car = car;
    13     }
    14 
    15     @Override
    16     public void run() {
    17         System.out.println("我是ProxyCar,发动前...");
    18         long t1 = System.nanoTime();
    19         // 调用被代理类的run()方法...
    20         car.run();
    21         long t2 = System.nanoTime();
    22         long t = t2 - t1;
    23         System.out.println("我是ProxyCar,发动后...,run的时长:" + t + "纳秒");
    24     }
    25 
    26 }

    测试类MyTest:

     1 package com.wyl.test;
     2 
     3 import com.wyl.bean.Car;
     4 import com.wyl.bean.StaticProxyCar;
     5 
     6 public class MyTest {
     7     public static void main(String[] args) {
     8         StaticProxyCar mproxyCar = new StaticProxyCar(new Car("Luxes"));
     9         mproxyCar.run();// 静态代理
    10     }
    11 }

    控制台输出:

    我是ProxyCar,发动前...

    DazhongCar开始run...

    我是ProxyCar,发动后...,run的时长:184319纳秒

  • 相关阅读:
    A physically based scene with three.js
    pbr-guide
    Art Pipeline for glTF
    GG5D
    Leetcode 146.LRU缓存机制
    Leetcode 143.重排链表
    Leetcode 142.环形链表II
    Leetcode 141.环形链表
    Leetcode 139.单词拆分
    Leetcode 138.复制带随机指针的链表
  • 原文地址:https://www.cnblogs.com/Sunnor/p/5640736.html
Copyright © 2011-2022 走看看