设计模式知识连载(34)---备忘录模式:

<body>


<h3>设计模式知识连载(34)---备忘录模式:</h3>
<p>
    在不破坏对象的封装性的前提下,在对象之外捕获并保存该对象内部的状态以便日后对象使用或者对象恢复到以前的某个状态。
</p>

<hr>
<div>
    <div>
        <ul>
            <li>1111111111111111111111</li>
        </ul>
    </div>
    <div>
        <span id = 'pre_page'>上一页</span>
        <span id = 'next_page'>下一页</span>
    </div>
</div>


<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">



    /**
    *   案例一:新闻展示,方式一:初始
    */
    // 下一页按钮点击事件
    $('#next_page').on('click', function() {
        // 获取新闻内容元素
        var $news = $('#news_content') ;
        // 获取新闻内容元素当前页数据
        var page = $news.data('page') ;
        // 获取并显示新闻
        getPageDate(page, function() {
            // 修正新闻内容元素当前页面数据
            $news.data('page', page + 1) ;
        }) ;
    }) ;
    // 上一夜按钮点击事件
    $('#pre_page').on('click', function() {
        // 显示上一页
    }) ;
    /***
    *   请求某一页新闻
    *   参数page :当前页 
    *   参数fn : 成功回调函数
    ****/
    function getPageDate(page, fn) {
        // post请求数据
        $.post('./data/getNewsData.php', {
            // 数据:页面
            page : page
        }, function(res) {
            if(res.errNo == 0) {
                // 显示当前页
                showPage(page, res.data) ;
                fn && fn() ;
            }
        }) ;
    }       
    // 显示某页逻辑
    function showPage(page, data) {
        console.log('执行了showPage()方法') ;
    } ;


    /**
    *   案例一:新闻展示,方式二:新闻缓存器
    */
    // Page备忘录类
    var Page = (function() {
        // 信息缓存对象
        var cache = {} ;
        /***
        *   主函数
        *   参数 page     页码
        *   参数 fn   成功回调函数
        ****/
        return function(page, fn) {
            // 判断该页数据是否在缓存中
            if(cache[page]) {
                // 恢复到该页状态,显示该页内容
                showPage(page, cache[page]) ;
                // 执行成功回调函数
                fn && fn() ;
            }else {
                // 若缓存Cache中无该页数据
                $.post('./data/getNewsData.php', {
                    // 请求携带数据page页码
                    page : page
                }, function(res) {
                    // 成功返回
                    if(res.errNo == 0) {
                        // 显示该页数据
                        showPage(page, res.data) ;
                        // 将该页数据种入缓存中
                        cache[page] = res.data ;
                        // 执行回成功回调函数
                        fn && fn() ;
                    }else {
                        // 处理异常
                    }
                }) ;
            }
        }
    })() ;

    // 单元测试
    // 下一页按钮点击事件
    $('#next_page').on('click', function() {
        // 获取新闻内容元素
        var $news = $('#news_content') ;
        // 获取新闻内容元素当前页数据
        var page = $news.data('page') ;
        // 获取并显示新闻
        Page(page, function() {
            // 修正新闻内容元素当前页数据
            showPage('page', page + 1) ;
        }) ;
    }) ;
</script>   

</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值