热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:用代码写代理给代码找代练!

篇首语:本文由编程笔记#小编为大家整理,主要介绍了用代码写代理给代码找代练!相关的知识,希望对你有一定的参考价值。代理模式

篇首语:本文由编程笔记#小编为大家整理,主要介绍了用代码写代理给代码找代练!相关的知识,希望对你有一定的参考价值。




代理模式

1、内容

为其他对象提供一种代理以控制对这个对象的访问。简单的说就是自己不想去干的事情交给代理去干。

 

2、角色

    ○ 抽象实体

    ○ 实体

    ○ 代理

 

3、适用场景

    ○ 远程代理:为远程的对象提供代理

    ○ 虚代理:根据需求创建很大的对象

    ○ 保护代理:控制对原始对象的访问,用于对象有不同访问权限时,比如只读不能写。

 

4、优点

    ○ 远程代理:可以隐藏对象位于远程地址空间的事实

    ○ 虚代理:可以进行优化,例如根据要求创建对象

    ○ 保护代理:允许在访问一个对象时有一些附加的内务处理

 

5、缺点

        在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。

        增加了系统的复杂度。

 

6、代码示例


from abc import abstractmethod,ABCMeta
class Subject(metaclass=ABCMeta):
@abstractmethod
def get_content(self):
pass
class RealSubject(Subject):
def __init__(self,filename):
self.filename
= filename
print(
"读取%s文件内容" % filename)
f
= open(filename)
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 ProxyA(Subject):
def __init__(self, filename):
self.subj
= RealSubject(filename)
def get_content(self):
return self.subj.get_content()
class ProxyB(Subject):
\'\'\'虚代理\'\'\'
def __init__(self, filename):
self.filename
= filename
self.subj
= None
def get_content(self):
if not self.subj: #if True 如果为空的时候,就去读取文本
self.subj
= RealSubject(self.filename)
return self.subj.get_content()
class ProxyC(Subject):
\'\'\'保护代理\'\'\'
def __init__(self, filename):
self.subj
= RealSubject(filename)
def get_content(self):
return self.get_content()
def set_content(self):
raise PermissionError
# 写一个set_content
b
= ProxyB("abc.txt")
print(b.get_content())

=====================

- End -

不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

【值得关注】我的 编程学习交流俱乐部 !【点击进入】

C语言入门资料(网盘链接免费分享):



 

C语言推荐书籍(PDF免费分享):



 



推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文介绍了如何在Spring框架中使用AspectJ实现AOP编程,重点讲解了通过注解配置切面的方法,包括方法执行前和方法执行后的增强处理。阅读本文前,请确保已安装并配置好AspectJ。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 更新vuex的数据为什么用mutation?
    更新vuex的数据为什么用mutation?,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了如何使用Java和PDFBox库根据坐标值对PDF文件进行局部切割的方法。 ... [详细]
author-avatar
手机用户2502917981
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有