手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表全部文章

戏说GoF设计模式

创建型模式

1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
       
        工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
       
        2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语 言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你” builder。(这一定比美军在伊拉克用的翻译机好卖)
       
        建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
       
        3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
       
        工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
       
        4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)
       
        原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减 少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
       
        5、SINGLETON—俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)
       
        单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

……………………

» 阅读全文

Tags: 设计模式

jQuery插件——文章自动生成导航

这个插件很实用,适合那种写着教程内容的页面,以前如果有多个标题的话,必须一个一个的加锚点,然后再加链接,这样不太方便。所以看到这个插件的时候,我忍不住记录下来。

代码我没有细看,我只看了demo,自己觉得还是很有用的。
代码来自CSSRain.cn,图片同样来自他那里。
网站说:

XML/HTML代码
  1. 首先根据文章 自动在 右上角生成 导航菜单,  
  2. 然后导航菜单可以 跟随 滚动条滚动 ,实时导航。  
  3. 导航采用平滑方式,更人性化。  
  4.   
  5. 演示:  
  6. http://cssrain.cn/demo/createTitle/title.html  
  7.   
  8. 下载:  
  9. http://cssrain.cn/demo/createTitle/createTitle.rar  
  10.   
  11. 有问题 请留言, 只测试了 google  和 firefox 。   

不过,IE或者其他的一些多窗口版的浏览器,会不会把它当成AD层屏蔽掉呢?
截图:
大小: 40.92 K
尺寸: 500 x 141
浏览: 2824 次
点击打开新窗口浏览全图
源码分流:
createtitle.rar

Tags: jquery, plugins, 导航

[图]Gmail改变附件选择方式和增加上传状态显示

http://www.cnbeta.com/articles/78036.htm
这是一条来自cnbeta的新闻,看到这个我很惊讶,确实非常的惊讶。
如果说GOOGLE是采用activex来实现,我恐怕不会惊讶,要知道foxmail等就是采用了这种方法。
但事实上,没有......

在我的猜测里,它应该是采用FLASH实现的。因为在我的想像里,好象只有FLASH才能实现这种多文件上传。
我没有看到具体的源代码,这仅仅是我的猜测,但我确实希望这不是用flash实现的,因为他的进度条,并非用flash实现。

这是一个进步。或许是我们以前的思路出了问题?

Tags: 上传, 多文件, google, gmail

服务器合托

本来不好意思写上来的,但想想,还是写上来吧。(穷,没办法,呵呵)
服务器征求合托,以下是服务器的资料,以及待托管的情况:

服务器型号:dell 2850
内存:512M * 4
硬盘:72*4+36*1,作raid 1,scsi硬盘,所以,可用的是144+18,除去系统占用空间,估计最少有100G可用。
托管:考虑是电信,暂不作双线考虑(目前在网通,大致准备6月份左右搬)
准备:提供SVN服务,WEB服务(LAMP + memcached + eacceraltra),(FTP可以考虑。)MAIL服务 坚决不考虑
(目前是windows系统,准备迁出后,大约有2天时间进行 LINUX或FREEBSD的安装配置)
1k 10G 拍卖,筹够资金后就考虑搬迁,并不一定是非要在6月份,呵呵)

[为避免过于影响浏览者的视线,置顶时间为一个月,谢谢理解]

QQ:19129540
MSN:GOUKIXIAO%HOTMAIL。COM
不好意思,实在是为了防止被抓取到。

Tags: 服务器, 托管, 电信

学做jQuery中的data()函数

看到这个内容的时候,很吃惊,其实我在以前看到过一个R开头的网站时(记不清了,实在记不清了),他用JS做了一个cache函数,对函数做了缓存。还用了斐伯拉切函数做了测试。后来我根据他写的代码用jQuery写了一个类似的插件(它是把方法注册到了window对象里,所以加快了一些速度)。后来感觉这样的方法也同样可以用在数据上,又根据这样的想法写了一个存储数据的cache函数。也分别用在了两个不同的项目里。

如今又看到有人写这样类似的东西,就把他贴上来进行分享。

文章的内容来自:

原文如下:http://www.cssrain.cn/article.asp?id=1295

在jQuery中可以使用data()来给元素存储临时的变量:
// jQuery:
    // Set data:
    $(elem).data('customProperty', 12345);
    // Get data:
    $(elem).data('customProperty');

在mootools中可以使用store()来给元素存储临时的变量:
// MooTools:
    // Set data:
    elem.store('customProperty', 12345);
    // Get data:
    elem.retrieve('customProperty');


下面我们用JavaScript 自己动手写一个:
(function(){

    var cache = [0],
          expando = 'data' + +new Date();

    function data(elem) {

        var cacheIndex = elem[expando],
            nextCacheIndex = cache.length;

        if(!cacheIndex) {
            cacheIndex = elem[expando] = nextCacheIndex;
            cache[cacheIndex] = {};
        }

        return cache[cacheIndex];

    }

    window.data = data;

})();

使用:
var myElem = document.getElementById('id');
// 设置data:
data(myElem).customProperty = 12345;
// 获取 data:
data(myElem).customProperty; // returns 12345

//  用其他的变量
data(myElem).info = {
    a : 123,
    b : [4,5,6]
};


这个脚本其实很简单,就是往cache 数组里添加 下标 元素。
默认cache=[0] ,当 elem[expando] 没有获取到时,则往数组里 添加一个下标,同时下标又与数组是关联起来的。
如果elem[expando]获取到时,则直接返回  cache[cacheIndex] 。


这点搞定后,那就简单了,就是往一个空对象中 配置 属性了。



进一步修改函数:
// WITH ENCAPSULATION:
(function(){

    var cache = [0],
        expando = 'data' + +new Date();

    function data(elem) {

        var cacheIndex = elem[expando],
            nextCacheIndex = cache.length;

        if(!cacheIndex) {
            cacheIndex = elem[expando] = nextCacheIndex;
            cache[cacheIndex] = {};
        }

        return {
            get : function(key) {
                return cache[cacheIndex][key];
            },
            set : function(key, val) {
                cache[cacheIndex][key] = val;
                return val;
            }
        }

    }

    window.data = data;

})();

用法:
var myElem = document.getElementById('id');

// 设置data:
data(myElem).set('customProperty', 12345);

// 获取data:
data(myElem).get('customProperty'); // returns 12345


ok,一个类似jQuery的data()函数就完成了。


其实我自己还是觉得用对象更好处理一些,一来,对象不象数组,一定要用下标才能读取,而且对于对象的覆盖等,也方便很多。删除的话也容易。

Tags: data, cache, 缓存