python设计模式---结构型之代理模式
主要想着nginx:)
from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self): self.is_busy = False def occupied(self): self.is_busy = True print(type(self).__name__, ' is occupied with current movie.') def available(self): self.is_busy = False print(type(self).__name__, ' is free for the movie.') def get_status(self): return self.is_busy class Agent: def __init__(self): self.principal = None def work(self): self.actor = Actor() if self.actor.get_status(): self.actor.occupied() else: self.actor.available() r = Agent() r.work() class Payment(metaclass=ABCMeta): @abstractmethod def do_pay(self): pass class Bank(Payment): def __init__(self): self.card = None self.account = None def _get_account(self): self.account = self.card return self.account def _has_funds(self): print('Bank:: Checking if Account ', self._get_account(), ' has enough funds.') return True def set_card(self, card): self.card = card def do_pay(self): if self._has_funds(): print('Bank:: Paying the merchant') return True else: print('Bank:: Sorry, not enough funds!') class DebitCard(Payment): def __init__(self): self.bank = Bank() def do_pay(self): card = 3234324 self.bank.set_card(card) return self.bank.do_pay() class You: def __init__(self): print('You:: Let us buy the Denim shirt') self.debit_card = DebitCard() self.is_purchased = None def make_payment(self): self.is_purchased = self.debit_card.do_pay() def __del__(self): if self.is_purchased: print('You:: Wow! Denim shirt is Mine :-)') else: print('You:: I should earn more :(') you = You() you.make_payment()
Actor is free for the movie. You:: Let us buy the Denim shirt Bank:: Checking has enough funds. Bank:: Paying the merchant You:: Wow! Denim shirt is Mine :-)
python设计模式---结构型之代理模式的更多相关文章
- python设计模式---结构型之门面模式
门面,系统,客户端~ from django.test import TestCase class Hotelier: def __init__(self): print('Arranging the ...
- JAVA设计模式 5【结构型】代理模式的理解与使用
今天要开始我们结构型 设计模式的学习,设计模式源于生活,还是希望能通过生活中的一些小栗子去理解学习它,而不是为了学习而学习这些东西. 结构型设计模式 结构型设计模式又分为 类 结构型 对象 结构型 前 ...
- 【设计模式】结构型01代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 定义:顾名思义,增加中间层,为其他对象提供一种代理以控制对这个对象的访问.核心在于代理二字. 1.和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理 ...
- 结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)
先上UML图 代理模式: 适配器模式: 门面模式(外观模式): 打了例子……呃……举个比方 代理模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,但是自己有不能去找潘金莲去说,于是他找到了金牌代理人王 ...
- 《精通Python设计模式》学习结构型之代理模式
这种模式,总会让人想到SRPING中的AOP, 不同语言有不同的实现方式吧. class SensitiveInfo: def __init__(self): self.users = ['nick' ...
- 【转】设计模式(十一)代理模式Proxy(结构型)
设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ...
- 【结构型】Flyweight模式
享元模式的主要目的.意图是为对象的大量使用提供一种共享机制.该模式的思想重在复用.共享复用.像文字.列表中的格子等这类多数都是需要考虑复用技术,否则必将大量耗费内存空间而使资源以及性能等大量耗费.该模 ...
- 设计模式之jdk动态代理模式、责任链模式-java实现
设计模式之JDK动态代理模式.责任链模式 需求场景 当我们的代码中的类随着业务量的增大而不断增大仿佛没有尽头时,我们可以考虑使用动态代理设计模式,代理类的代码量被固定下来,不会随着业务量的增大而增大. ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
随机推荐
- LOJ#2087 国王饮水记
解:这个题一脸不可做... 比1小的怎么办啊,好像没用,扔了吧. 先看部分分,n = 2简单,我会分类讨论!n = 4简单,我会搜索!n = 10,我会剪枝! k = 1怎么办,好像选的那些越大越好啊 ...
- Unity 子弹移动以及碰撞条件
一.子弹移动 游戏物体移动最主要的是获取一个刚体组件,再对这个刚体组件添加一个向前的力: 具体代码: public class BulletCtrl : MonoBehaviour { ; publi ...
- html中设置锚点定位
1.使用id定位: (这样的定位可以针对任何标签来定位. ) <a name="1F" href="#1F">锚点1</a> <d ...
- Linux(Centos)设置ip
一.Linux(Centos7)安装完毕后,重启电脑后,输入用户名(root),密码(**********). 在命令行中输入nmtui命令.选择Edit a connection,选择对应的链接端口 ...
- 使用fork的str_cli函数
void str_cli(FILE *fp, int sockfd) { pid_t pid; char sendline[MAXLINE], recvline[MAXLINE]; ) { /* ch ...
- java校验字符串是否为json格式
觉得挺好玩的一个问题,如何校验字符串是否为标准的json格式,刚开始的回答是jsonObject或者jsonArray转换一下,如果可以转换,说明为json字符串,如果不能就抛出异常,捕获异常. 但是 ...
- ccf 201903-5 317任务
[题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...
- TP5框架,开源小程序商城源码,前端+后台完整版
CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...
- mysql远程连接很慢问题解决
mysql开启远程访问发现从远程连接每次都在5秒以上,从本机连接很快. 解决方案: [mysqld] 标签下添加一行配置 skip-name-resolve 重启mysqld服务, 问题解决!
- Image 上传下载Api
1.配置 "UploadConfig": { // 自定义存放位置,无需放到站点内部 "Path": "C:\\Users\\kxy\\Desktop ...