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

             最近学了下代理模式,在这里与大家分享一下,本人是初学者,如果有不足之处,请各位指出,并多加指点微笑

         代理模式结构图如下:

     

          

         代理模式的角色有:

    ——抽象角色:声明真实对象和代理对象的共同接口。

    ——代理角色:代理对象角色的内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象

                             相同的接口以便在任何时刻都能代替真实对象。同时代理对象可以在执行真实对象操作时,附加其他                      的操作,相当于对真实对象进行封装。(对应上图的Proxy)

    ——真实角色:代理角色所代表的真实对象,使我们最终要引用的对象。(对应上图的RealSubject)

     

    下面的一小段代码,加入说明:

    1.声明抽象角色和真实角色的共同接口PayInterface

     

    public interface PayInterface
    {
    	public void payFor(String name, int money);
    
    }
    
    




    2.真实角色实现接口PayInterface

    public class RealObject implements PayInterface
    {
    	public void payFor(String name, int money)
    	{
    		System.out.println("Pay "+ money +" dollars for " + name );
    	}	 
    }

     

    3.代理角色的实现

    public class Proxy implements PayInterface
    {
    	private RealObject real; //真实对象的引用
    	
    	public void payFor(String name, int money)
    	{
    		this.beforePay();
    		
    		real = new RealObject();
    		real.payFor(name, money);
    		
    		this.afterPay();
    	}
    	
    	private void beforePay()
    	{
    		System.out.println("Before pay for,I can do myserf things");
    	}
    	
    	private void afterPay()
    	{
    		System.out.println("After pay for, I can get my pay");
    	}
    }

    代理角色完成代理功能之外,还可以完成自己的功能。

    4.最后客户端的调用(Client)

    public class Client
    {
    	public static void main(String[] args)
    	{
    		PayInterface proxy = new Proxy();
    		proxy.payFor("Jimmy", 900);
    	}
    }


    运行结果为:

     

    简简单单,其实本人对代理模式不甚了解,希望各位前辈指点一二。
  • 相关阅读:
    django media配置
    django model项目外操作
    django 快捷代码提示
    django静态文件路径配置
    selenium爬取网易云
    selenium
    pyquery
    beautifulsoup
    Kafka与.net core(三)kafka操作
    Oracle 日期类型timestamp(时间戳)和date类型使用
  • 原文地址:https://www.cnblogs.com/hanyuan/p/2587326.html
Copyright © 2011-2022 走看看