zoukankan      html  css  js  c++  java
  • 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、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
    使用代理模式,可以将功能划分的更加清晰,有助于后期维护!





  • 相关阅读:
    How to read a whole document content into a string onetime
    how to get the Authorization of adobe acrobat 8.0 for free
    给求职的同学的几点建议
    select() manul select() 手册
    有无一步登天之法?
    VB6.0 Excel模版,自己設定好分析餅圖,如何動態地更新分析圖的數據源呢?
    C#中的委托和事件(续)
    C# 中的委托和事件
    VB6.0 Excel的動態生成多個Sheet的方法
    VB6.0 用Excel生成數據分析餅圖例子
  • 原文地址:https://www.cnblogs.com/liubo6/p/4550892.html
Copyright © 2011-2022 走看看