• 8 代理模式(Proxy)


    其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。先来看看关系图:
     

     
    1. /**
       * @author liubo
       *
       */
      public interface Sourceable {
      	public void method();
      }
      

        


    1. package com.liubo.patterns.proxy;
      /**
       * @author liubo
       *
       */
      public class Source implements Sourceable {
      	public void method() {
      		System.out.println("the original method");
      	}
      }
      

        

      package com.liubo.patterns.proxy;
      /**
       * @author liubo
       *
       */
      public class Proxy implements Sourceable {
      	private Sourceable source;
      	/**
      	 * @param source
      	 */
      	public Proxy(Sourceable source) {
      		super();
      		this.source = source;
      	}
      	public void method() {
      		before();
      		source.method();
      		after();
      	}
      	public void before() {
      		System.out.println("before proxy");
      	}
      	public void after() {
      		System.out.println("after proxy");
      	}
      }
      

        

      package com.liubo.patterns.proxy;
      import org.junit.Test;
      /**
       * @author liubo
       *
       */
      public class ProxyTest {
      	@Test
      	public void testProxy() {
      		Sourceable source = new Source();
      		Sourceable sourceTest = new Proxy(source);
      		sourceTest.method();
      	}
      }
      

        


     
    输出:
    before proxy!
    the original method!
    after proxy!
    代理模式的应用场景:
    如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
    1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
    2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
    使用代理模式,可以将功能划分的更加清晰,有助于后期维护!





  • 相关阅读:
    设计模式开篇——7大设计原则
    MySQL MVCC专题
    Spring常考的面试题
    HashMap常考面试题
    Equals和==的比较
    高并发编程
    一文读懂JVM
    scala实现定时任务的方法
    PLAY2.6-SCALA(十二) 表单的处理
    PLAY2.6-SCALA(十一) 模板常用场景
  • 原文地址:https://www.cnblogs.com/liubo6/p/4550892.html
Copyright © 2020-2023  润新知