设计模式学习—代理模式(Proxy Design Pattern)

一、我的理解

代理模式的主要作用是通过代理类来控制对目标类的访问。它主要强调的是代理类对被代理的类的访问进行一定控制。

二、实现方式

  • 代理类和实体类都继承同一个接口(或抽象基类),具有相同的功能接口。
  • 代理类内部维护一个实体类对象,真正的功能实现是调用改对象的接口。

三、Java实例


Image接口:提供一个共同的接口,这样便于抽象

public interface Image {

	void display();

}
RealImage类:实际要访问的类

public class RealImage implements Image {

	private String fileName;

	public RealImage(String fileName) {
		super();
		this.fileName = fileName;
		loadFromDisk(fileName);
	}

	@Override
	public void display() {
		System.out.println("Displaying "+fileName);
	}
	
	private void loadFromDisk(String fileName) {
		System.out.println("Loading "+fileName);
	}

}
ProxyImage类:代理

public class ProxyImage implements Image {
	
	private RealImage readImage;
	private String fileName;

	public ProxyImage(String fileName) {
		super();
		this.fileName = fileName;
	}

	@Override
	public void display() {
		if(readImage==null) {
			readImage = new RealImage(fileName);
		}
		readImage.display();
	}

}
Demo类:测试

public class Demo {

	public static void main(String[] args) {
		Image image = new ProxyImage("test_10mb.jpg");
		
		// 图像将从磁盘加载
		image.display();
		System.out.println();
		
		// 图像将无法从磁盘加载
		image.display();
	}

}

四、Python源码

ProxyDesignPattern.py文件:

#coding=utf-8

class Subject(object):
    def Request(self):
        raise NotImplementedError()

class RealSubject(Subject):
    def Request(self):
        print "实际实现的类"

class Proxy(Subject):
    def __init__(self):
        self.readSubject = RealSubject()

    def Request(self):
        self.readSubject.Request()

if __name__=='__main__':
    proxy = Proxy()
    proxy.Request()


参考资料:

1.http://www.runoob.com/design-pattern/proxy-pattern.html

2.http://www.jianshu.com/p/b80e7395fd5f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值