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.提升效率--僵尸代码的迷思
paip.提升效率--僵尸代码的迷思 僵尸代码是指你的代码库里被注释掉的那部分代码, 很少去使用它,就像僵尸一样, 看雷kill-the-zombies-in-your-code ========== ...
- 修改Android签名证书keystore的密码、别名alias以及别名密码
Eclipse ADT的Custom debug keystore自定义调试证书的时候,Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指 ...
- Leetcode 344 Reverse String 字符串处理
题意:反转字符串,用好库函数. class Solution { public: string reverseString(string s) { reverse(s.begin(),s.end()) ...
- Winform TreeView 查找下一个节点
转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html public static class TreeViewHelper { ...
- 于网站主机,DNS,域名解析,Web服务器关系详解
/*本文将介绍网站主机,DNS,域名解析,Web服务器关系,转载请保留以下版权*/ /*启明星工作室 www.dotnetcms.org 提供会议室预定系统,请假系统,helpdesk,工作日志系统 ...
- android studio 乱码
1. 设置 file- setting -file encodeing- 设置utf-8 2 . build.gradle 添加 tasks.withType(JavaCompile) { opti ...
- iis 故障导致网站无法访问
服务器使用两三个月突然,昨天无法访问,重启后正常,第二次发生这样的事情了,打开 C:\WINDOWS\system32\LogFiles\HTTPERR 下的 httperr1.txt 201 ...
- IE11企业模式介绍及可用性评估
什么是企业模式? 企业模式是可以在 Windows 8.1 和 Windows7 设备上的 Internet Explorer 11 上运行的一种兼容性模式,该模式允许网站使用已修改的浏览器配置来呈现 ...
- error while loading shared libraries: /usr/lib64/libc.so.6: invalid ELF header
在安装一个程序的时候提示libc.so.6过旧,但是查看libc.so的版本是最新的,于是尝试使用尝试软链接 ln -s /usr/lib64/libc.so /usr/lib64/libc.so. ...
- Windows 10开启默认网络驱动器访问
在Windows 10的系统策略中,驱动器盘符的网络访问是默认关闭的,用管理员权限打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...