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.build(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的更多相关文章
- smartjs 0.2 OOP讲解 - Klass 类继承
SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...
- smartJS 0.1 API 讲解 - FlowController
本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...
- smartJS 0.1 API 讲解 - PromiseEvent
上篇简单的介绍smartjs了一些通用方法的api.这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上 ...
- smartJS 0.1 API 讲解 - Trigger
上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...
- smartjs 0.2发布 - 新增oop模块&AOP增强
SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...
- AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼ AFNetworking 2.0 相比1.0 API ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-3.微信Oauth2.0交互流程讲解
笔记 3.微信Oauth2.0交互流程讲解 简介:讲解微信Oauth2.0交互流程 参考:https://open.weixin.qq.com/cgi-bin/sho ...
- smartjs 0.3 DataManager 发布&介绍
在0.3版加入了DataManager,基于策略的数据管理模块:是SmartJS中比较重要的一个系列.整个个DataManager模块包括有:dataManager,dataPolicyManager ...
- [置顶] AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRe ...
随机推荐
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- paip.jdbc 连接自动释放的测试
paip.jdbc 连接自动释放的测试 使用的mysql jdbc3.1.6 以及5.1.7 测试结果,在没有conn.close()的情况哈.. 作者Attilax 艾龙, EMAIL:146 ...
- 重学JAVA基础(八):锁的基本知识
1.线程状态 如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态.这个过程 ...
- 详解eNSP下的PPP之MP、PAP/CHAP认证实验配置
一.PPP MP实验(用虚拟模板配置) 1.拓扑图
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
参考资料 reference: http://mongodb.blog.51cto.com/1071559/740131 http://docs.mongodb.org/manual/tutori ...
- C#中的串口通信
关于串行接口 串行接口(Serial port)又称“串口”,主要用于串行式逐位数据传输.常见的有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工 ...
- Cluster群集
Cluster群集一般来讲有四个功能1. 冗余功能,就是说在这个群集中的任何一台机器出现本机或网络故障时,整个网络仍不中断,对外的服务也不中断,网络有多个路线可以走,服务器也可以相互代替.2.负载均衡 ...
- VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...
- java代码实现如何获取当前经纬度?(安卓的话可以用GPS取)
import android.app.Activity; import android.os.Bundle; import android.location.*; import android.con ...
- Passwordless SSH Login
原文地址:http://manjeetdahiya.com/2011/03/03/passwordless-ssh-login/ Consider two machines A and B. We w ...