设计模式——代理模式(控制对象的访问)

设计模式——代理模式

代理模式:为一个对象提供一种代理,以控制这个对象的访问;代理对象起到类似中介的作用,会增加一些功能(效验、合并等),也会去掉原对象的一些功能;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title></title>
    <link rel="stylesheet" href="">
</head>
<style>
    div{
        display:inline-block;
        border: 1px solid #090;
    }
    div img{
        width: 300px;
        height: 200px;
        margin-bottom: -4px;
    }
</style>
<body>
    <div id="demo">hello</div>
    <button type="addWidth">加宽</button>
    <button type="addBg">加背景</button>
    <button type="addFs">加字体</button>
    <button type="addFw">加粗</button>
    <button type="addC">加颜色</button>
    <script>
    //虚拟代理:
    //demo1: 实现图片未加载完成时用本地图片站位功能:
        var MyImage = function (id) {
            var oImg = new Image();
            this.setSrc = function (src) {
                oImg.src = src;
            }
            document.getElementById(id).appendChild(oImg);
        }
        var ProxyImage = (function () {
            var oMyImage = new MyImage('demo');
            var oNewIamge = new Image();
            oNewIamge.onload = function () {
                oMyImage.setSrc(oNewIamge.src); 
          //当图片全部请求完成后,直接将原站位图片的地址更改;
            }
            return function (src) {
                oMyImage.setSrc('./1.jpg');
                          //本地的一个站位图片;
                oNewIamge.src = src;

            }
        })()
        ProxyImage('http://attach.bbs.miui.com/forum/201111/21/205700txzuacubbcy91u99.jpg');
        //网上请求的图片资源;

    //demo2:实现用户连续发送数据时,将用户多次的请求操作先存下来,利用延时器最后一并一起发送数据:
    //这里用一个改变dom不同的样式的demo来模拟请求数据;
        var oBtnArray = document.getElementsByTagName('button');
        for(var i = 0; i < oBtnArray.length; i++) {
            oBtnArray[i].onclick = function(){
                realDeal(this);
            }
        }
        function deal (dom) {
            console.log(dom)
            switch (dom.getAttribute('type')){
                case "addWidth":
                    demo.style.width = demo.offsetWidth + 50 + 'px';
                    break;
                case "addBg":
                    demo.style.backgroundColor = 'yellow';
                    break;
                case "addFs":
                    demo.style.fontSize = '25px';
                    break;
                case "addFw":
                    demo.style.fontWeight = 'blod';
                    break;
                case "addC":
                    demo.style.color = 'green';
                    break;
            }
        }
        var MyProxy = function (func) {
            var cache = [];                           //通过一个数组做缓存;
            var timer = null;
            return function () {
                cache.push(arguments[0]);
                clearInterval(timer);
                timer = setTimeout(function () {      //进行延迟处理;
                    for(var i = 0; i < cache.length; i++) {
                        func.call(cache[i], cache[i]);
                    }
                    cache = [];
                }, 2000)
            }
        }
        var realDeal = MyProxy(deal);
    </script>

</body>
</html>

代理模式中除了上述的虚拟代理思想,还有保护代理(安全代理)模式,主要针对表单提交等操作,先在前端对用户操作进行过滤,保护服务器端的请求质量;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值