smartjs 0.2 OOP讲解 - factory

本篇介绍OOP的第二个对象factory。在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的。

在smartjs中的factory并不是指的是工厂模式。在factory要求定义一个基础对象,这个对象可以是基类,也可以是模板对象或者是接口。然后factory就已此基础对象为基础,其他添加或者创建的对象,继承或者是复制基础对象的属性和方法。factory在提供一系列方法来对这些对象做控制。

factory经过简单的处理可以实现工厂、外观、模板等设计模式。

接口说明

//多参数接口
        st.factory(name, base, proto, type, initDefault)

        //参数对象接口
        st.factory({
            //工厂名
            name : "",
            //基类对象
            base : {},
            //工厂的扩展属性和方法对象
            proto:{},
            //工厂的类型;默认:类实例化后的对象;class:类对象,未实例化;merge:对象复制合并
            type : "",
            //是否将base设置成为默认的对象;当使用factory.get找不到对象时返回默认对象
            initDefault:true
        })

        //创建工厂后的接口说明

        //创建产品方法,但不注册到factory中去,name:产品名称;item:产品特性;parent:父类名称
        factory.create(name, item, parent)

        //添加产品方法,会注册到factory中去,name:产品名称;item:产品特性;parent:父类名称
        factory.add(name, item, parent)

        //查找产品方法,name:产品名称;defaultMode:是否在找不到产品的时候返回默认对象
        factory.find(name, defaultMode)

        //删除产品方法,name:产品名称
        factory.remove(name)

        //设置默认产品方法,name:产品名称
        factory.setDefault(name)

        //执行所有产品的某个方法,fnName:产品的方法名称;args:参数数组
        factory.fire(fnName,args)

实例代码

        //widget基类
        var baseWidget = {
            //widget类型
            type: ‘‘,
            //widget的渲染方法
            render: function(id) {
                return this.type + ‘:‘ + id;
            }
        };

        //一个widget工厂
        var widgetFactory = st.factory(‘wdigetfactory‘, baseWidget);

        //添加一个input
        widgetFactory.add(‘input‘, {
            type: ‘input‘
        })

        it("factory add", function() {
            //找到添加的input
            var input = widgetFactory.find(‘input‘);
            expect(input).toBeDefined();
            //输出
            expect(input.render(‘txt‘)).toBe("input:txt");
        });

        it("factory inheirt", function() {
            //添加一个number类型的input
            var num = widgetFactory.add(‘number‘, {
                type: ‘input[number]‘
            }, ‘input‘)

            expect(num.render(‘txtNum‘)).toBe("input[number]:txtNum");
        });

class模式

var f1 = st.factory({
                name: ‘classMode‘,
                //设置class类型
                type: ‘class‘,
                base: {
                    klassInit: function(name) {
                        this.name = name;
                    }

                }
            });

            var c1 = f1.add(‘c1‘, {
                type: ‘c1‘
            });

            expect(c1.fn).toBeDefined();
            //需要初始化
            var c = new c1(‘class1‘);
            expect(c.type).toBe("c1");
            expect(c.name).toBe("class1");

merge

var f2 = st.factory({
                name: ‘copyMode‘,
                //设置merge类型
                type:  ‘merge‘,
                //设置默认模式
                initDefault: true,
                base: {
                    name: ‘copy‘,
                    project: {
                        name: ‘smartjs‘
                    }
                }
            })

            var c = f2.add(‘c1‘, {
                name: ‘c1‘,
                project: {
                    role: ‘pm‘
                }
            });

            expect(f2.find().name).toBe("copy");
            expect(c.name).toBe("c1");
            expect(c.project.name).toBe("smartjs");
            expect(c.project.role).toBe("pm");

factory的使用方式还有很多,暂时就不多做介绍了,有机会专门找个专题来介绍具体的使用案列。另外在smartjs后续的内容中,也会大量使用factory。

smartjs 下一版预告,会加入smartjs核心的重要模块:基于策略的数据管理

smartjs 0.2 OOP讲解 - factory

时间: 2024-11-11 10:15:47

smartjs 0.2 OOP讲解 - factory的相关文章

smartjs 0.2 OOP讲解 - Klass 类继承

SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基类和初始化控制的扩展功能. 首先来看看接口: var _klass = st.klass(name, prop, parent, config); //new _klass() 与 _klass()效果相同,实现了自初始化功能更 var obj = new _klass(); name : 类名 p

smartJS 0.1 API 讲解 - FlowController

本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自己做一个总结,也希望分享一些东西给大家借鉴. 而对smartjs的来说,整体思想都并不是为了实现什么功能.特效和内容.而是希望体现一些前端编程模式或者思想上的内容,这次的0.1版本中,主要体现了一些面向切面编程.非侵入式编程.异步编程,生命周期控制的一些思想.包括后续的oop的内容,基于策略的数据管

smartJS 0.1 API 讲解 - PromiseEvent

上篇简单的介绍smartjs了一些通用方法的api.这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上) PromiseEvent 基于事件和promise的回调管理,类似于jquery的callbacks,但具有结果传递,优先级,事件参数,promise控制等功能 接口方法 var events = st.promiseEvent(mode); events.add(name,function(e

smartJS 0.1 API 讲解 - Trigger

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于 NSURLSessionConfiguration(IOS 7

微软C#6.0语言OOP面向对象编程》《微软ASP.NET\MVC56网站开发》《微软Web服务\WCF\Web API3.0课程视频》

最新<微软C#6.0语言OOP面向对象编程><微软ASP.NET\MVC56网站开发><微软Web服务\WCF\Web API3.0课程视频>下载 下载链接:http://pan.baidu.com/s/1bnjJQnd 密码:36ji 微软与开源实战训练营QQ群:  203822816微软MSDN俱乐部QQ群:  29754721,

ASmack4.0.7详细讲解

公司最近想做一个聊天软件,就选用了Openfire服务器,Asmack,下面就跟着自己的进度来写一些Asmack的基本方法,会不断跟进.由于网上对于Asmack的新版本的讲解不是太多,并且自己英语水平有限,就花了400大洋在网上买了一篇教程.自己的理解水平也是有限,大家如果有什么好的建议可以下面评论.大家共勉.开始 因为对于Asmack的操作函数,用到的会很多,所以说,对Asmack做了一个工具类.将所有的操作都放到一个XmppConnection.java中. 开启连接. TODO:无论进行什

Android事件总线分发库EventBus3.0的简单讲解与实践

Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.反正能帮助我们快速开发,这个确实是个好东西,其实鸿洋大神已经对源码作了一个较全面的剖析了 Android EventBus源码解析 带你深入理解Ev

dingo/API 最新版 V2.0 之安装讲解

我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https://github.com/dingo/api/wiki. The Dingo API package is meant to provide you, the developer, with a set of tools to help you easily and quickly build your