每天一个设计模式·代理商模式
来源:godbmw     阅读:591
易滴互联
发布于 2018-11-26 23:24
查看主页

博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript靠这吃饭)和python纯粹喜欢)两种语言实现。固然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)

0. 项目地址

1. 什么是代理商模式?

代理商模式的定义:为一个对象提供一种代理商以方便对它的访问。

代理商模式可以处理避免对少量对象的直接访问,以此为基础,常见的有保护代理商和虚拟代理商。保护代理商可以在代理商中直接拒绝对对象的访问;虚拟代理商可以推迟访问到真正需要的时候,以节省程序开销。

2. 代理商模式优缺点

代理商模式有高度解耦、对象保护、易修改等优点。

同样地,由于是通过“代理商”访问对象,因而开销会更大,时间也会更慢。

3. 代码实现

3.1 python3 实现

class Image:  def __init__(self, filename):    self.filename = filename  def load_img(self):    print("finish load " + self.filename)  def display(self):    print("display " + self.filename)# 借助继承来实现代理商模式class ImageProxy(Image):  def __init__(self, filename):    super().__init__(filename)    self.loaded = False  def load_img(self):    if self.loaded == False:      super().load_img()    self.loaded = True  def display(self):    return super().display()if __name__ == "__main__":  proxyImg = ImageProxy("./js/image.png")  # 只加载一次,其它均被代理商阻拦  # 达到节省资源的目的  for i in range(0,10):    proxyImg.load_img()  proxyImg.display()

3.2 javascript 实现

main.js :

// main.jsconst myImg = {  setSrc(imgNode, src) {    imgNode.src = src;  }};// 利用代理商模式实现图片懒加载const proxyImg = {  setSrc(imgNode, src) {    myImg.setSrc(imgNode, "./image.png"); // NO1. 加载占位图片并且将图片放入<img>元素    let img = new Image();    img.onload = () => {      myImg.setSrc(imgNode, src); // NO3. 完成加载后, 升级 <img> 元素中的图片    };    img.src = src; // NO2. 加载真正需要的图片  }};let imgNode = document.createElement("img"),  imgSrc =    "https://pic.songma.com/wenzhang/20181126/khh44ufucj0137.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp";document.body.appendChild(imgNode);proxyImg.setSrc(imgNode, imgSrc);

main.html :

<!-- main.html --><!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>每天一个设计模式 · 代理商模式</title></head><body>  <script src="./main.js"></script></body></html>

4. 参考

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
Java 反射机制的应用
Apache Hbase 第一干货 概念及操作
前台面试日更解答 2020-03-16
Web前台框架学习—Bootstrap
js中如何判断input框输入能否是纯数字
首页
搜索
订单
购物车
我的