4.12_proxy_结构型模式:代理模式
结构型模式 --- 代理模式 --- 内容:为其他对象提供一种代理,以控制对这个对象的访问角色:1. 抽象实体 (Subject)2. 实体 (Real Subject)3. 代理 (Proxy)适用场景:1. 远程代理:为远程的对象提供代理2. 虚代理:根据需要创建很大的对象3. 保护代理:控制对原始对象的访问,用于对象有不同访问权限时优点:1. 远程代理:可以隐藏对象位于远程地址空间的事实2. 虚代理:可以进行优化,例如根据要求创建对象3. 保护代理:允许在访问一个对象时,有一些附加的内务处理
from abc import ABCMeta, abstractmethodclass Subject(metaclass=ABCMeta):"""抽象实体 (Subject)"""@abstractmethoddef get_content(self):pass@abstractmethoddef set_content(self, content):passclass RealSubject(Subject):"""实体 (Real Subject)"""def __init__(self, filename):self.filename = filenamef = open(filename, 'r')print('读取文件内容...')self.content = f.read()f.close()def get_content(self):return self.contentdef set_content(self, content):f = open(self.filename, 'w')f.write(content)f.close()class VirtualProxy(Subject):"""虚代理"""def __init__(self, filename):self.filename = filenameself.subject = Nonedef 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, filename):self.subject = RealSubject(filename)def get_content(self):return self.subject.get_content()def set_content(self, content):# 权限逻辑raise PermissionError('无写入权限!')# subj = VirtualProxy('test.txt')
# print(subj.get_content())subj = ProtectedProxy('test.txt')
print(subj.subject.get_content())
subj.set_content('abc')
4.12_proxy_结构型模式:代理模式相关推荐
- Java设计模式之结构型:代理模式
前言: 我们一般在租房子时会去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做:再比如我们打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们 ...
- 设计模式(结构型)之代理模式(Proxy Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 每天学习一个设计模式(七):结构型之代理模式
目录 一.基本概念 二.通俗解释 三.代理模式的分类 1.普通代理 2.强制代理 代理是有个性的 3.动态代理 一.基本概念 代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下 ...
- 设计模式 - 结构型设计模式 - 代理模式(Java)
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 代理模式是最常使用的模式之一了,用一个代理来隐藏具体 ...
- Java设计模式之结构型:组合模式
前言: 我们对于上面两幅图片肯定非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构.在数据结构中我们知道可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可 ...
- Java设计模式之结构型:外观模式
一.什么是外观模式: 外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口.使用外观模式有以下几点好处: (1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要 ...
- Java设计模式之结构型:桥接模式
一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果, ...
- C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...
结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...
- JavaScript设计模式(三):结构型设计模式-外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式
JavaScript设计模式 - 结构型设计模式 套餐服务-外观模式 外观模式(Facade) 水管弯弯-适配器模式 适配器模式(Adapter) 适配异类框架 参数适配 牛郎织女-代理模式 代理模式 ...
最新文章
- [原创]分布式系统之缓存的微观应用经验谈(三)【数据分片和集群篇】
- Android 通过Service单独进程模仿离线推送 Server Push
- dockerfile的详细介绍
- oracle 12c缩容磁盘组,oracle 表收缩
- (二十)ArcGIS JS 加载WMTS服务(超图示例)
- 远程监控系统集成方案
- 配置标准IP ACL实验
- 【毕业N年系列】 毕业第三年
- 正版星界边境服务器,《星界边境(Starbound)》正式版联机教程
- SICP练习1.17
- css中clip属性的使用
- 亲密关系科学(04)让人快速爱上你的36问
- 【回溯法】机器零件加工-最优加工顺序
- 7-44 [0508]个人所得税
- AngularJs 最新验证手机号码,成功测试通过
- WAVEFORMATEX 格式说明
- PyTorch 笔记Ⅵ——Titanic 及 breast_cancer 分类应用
- 谷歌浏览器上传文件时候出现卡死现象
- Linux内核代码华人贡献统计
- VS 编译时 /MD 与 /MT、/MTD与/MDD的区别
热门文章
- JavaScript中的点击事件
- linux mtime参数,linux find mtime参数详解
- matlab机器人轨迹规划仿真程序,基于MATLAB的六自由度机器人轨迹规划与仿真.pdf...
- 罗翔 ---- 理想主义的花
- MySQL判断字符串是否是数字
- 计算机的配置与选购调查报告,目前主流危机计算机的配置及选购的调查报告.doc...
- oracle hibernate 自动创建表,自动创建表时,多了一张表hibernate_sequence,为什么?
- app 模拟器抓包 burpsuite_来看黑客是如何使用Proxifier+burpsuite代理https协议数据包...
- spring_boot的logback-spring.xml配置为什么 %d{yyyy-MM-dd} 不起作用
- 前端解决跨域的九种方法