设计模式-代理模式

代理模式

为一个对象提供一种代理,控制这个对这个对象的访问

  • 远程代理:
    • 如vpn,远程办公,不用管服务器在哪里,.只用操作代理即可,代理会把你的操作反馈到对象中
  • 虚代理
    • 根据需求创建很大的对象,比如浏览器的无图模式,加入图片很大,你不需要看到,浏览器就会不显示图片,等你需要看图点击了以后才读取图片,节约内存
  • 保护代理
    • 控制对原始对象的访问,设置权限
      举例
#抽象实体
class Subject(object):
	__metaclass__ = ABCMeta

	@abstractmethod
	def get_content(self):
		pass

	@abstractmethod
	def set_content(self, content):
		pass
#实体
class RealSubject(Subject):
	def __init__(self,failename):
		self.filename = failename
		f = open(failename, 'r')
		print "读取文件内容"
		self.content = f.read()
		f.close()

	def get_content(self):
		return self.content

	def set_content(self, content):
		f = open(self.filename, 'w')
		f.write(content)
		f.close()
#---------------代理-------------------
#虚代理
class VirtualProxy(Subject):
	def __init__(self,filename):
		self.filename = filename
		#组合,初始化不代用实体读取文件,如果文件很大,就可以节省内存,需要的时候在读取
		self.subject = None

	def get_content(self):
		if not self.subject:
			#需要的时候读取
			self.subject = RealSubject(self.filename)
		return self.subject.get_content()

	def set_content(self, content):
		if not self.subject:
			self.subject = RealSubject(self.filename)
		return self.subject.set_content(content)
#保护代理
class ProtectedProxy(Subject):
	def __init__(self, failename):
		self.failname = failename
		self.subject = RealSubject(failename)

	def get_content(self):
		return self.subject.get_content()

	def set_content(self, content):
		print "无权写入数据"
#---------------代理-------------------

#client
#虚代理
# sub = VirtualProxy("test.txt")
# print sub.get_content()

#保护代理
sub = ProtectedProxy("test.txt")
print sub.get_content()
sub.set_content("2222")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值