这段自学设计模式,请教两个关于设计方式的问题

coglass 2013-01-03 08:55:54
1、为什么有的一个函数就能解决的问题,要写成单体模式
例如:

function render(){

}
render()

要写成:

var view={render:funtion(){

}}
view.render()

这有什么实质意义吗?还是一些公司必须要求写成这样的单体模式。

2、前段时间还接触了个设计原则,叫开闭原则,我理解就是把一些扩展的方法集中写成公有的形式,还以下面这个为例:

view={render:funtion(){

}}
view.render()

render方法里要用到调用功能相同的一些其他方法,那是把这些方法写成view里面的方法:

view={render:funtion(){}, a:function(){}, b:function(){} }

还是写成下面的全局函数呢?

view={render:funtion(){

}}
view.render()
function a(){}
function b(){}

这有什么严格的规定吗?

...全文
185 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coglass 2013-01-05
  • 打赏
  • 举报
回复
我突然开窍了 非常感谢诸位
coglass 2013-01-05
  • 打赏
  • 举报
回复
那请问单体模式一旦出现,是不是就不能再有全局变量和全局函数了,不能一个文件里面又有单体模式,又有全局变量和函数 还有个问题,一个单体模式,是不是就为完成一个功能啊,它里面的属性和方法都是相关的吧?
CQCQC0 2013-01-04
  • 打赏
  • 举报
回复
个人感觉不是什么严格的规定,但是用着用着你会发现它这么做很好,所以慢慢地就成这样了(开闭原则不同) 第一个单例模式的话,在Java里就是一个类只对应一个实体存在,不用new很多,省资源吧。在Hibernate做数据库的时候用到过,其他我很少用到过。 第二个开闭原则,这个是Java里面最重要的了,同楼上各位所说的那样。lz可以想一下java里面向接口编程的方式,
未知数 2013-01-04
  • 打赏
  • 举报
回复
1.减少全局变量,避免命名冲突 2.方便统一管理,外部可以重新定义某个成员或者添加某个成员,你就把这个理解为js的命名空间就行了
猿敲月下码 2013-01-04
  • 打赏
  • 举报
回复
1. var view={render:funtion(){ }} view.render() 这样写的好处可以避免了方法名冲突问题. 如果用function render(){}方式,可能在某个地方有一个var render = 123;这样的变量,如此一来就冲突了. 但是view.render();就不会有方法名冲突 2. 开闭原则 从代码维护角度上来说就是对增加开放,对修改闭合. 比如我要新增一个功能,如果我能直接新增一个JS文件就能实现这个功能这样最好. 或者直接在JS文件内新增一个函数来实现这个功能. 反之,如果要去修改原来JS内部的代码来实现,这样就不太好了. 比如有这么一个需求: 需要根据后台返回的错误码来提示不同的错误信息,如1000-"用户名不存在",1001-"验证码不正确"等. 常规的做法就是用多个if else..语句来判断错误码,然后提示信息;万一以后我又要新加一个错误码,那就要 再在源代码中增加一个if语句,有没有一个办法让我新增一个JS文件,或者新增一个函数就能实现呢 答案是有的:
<script type="text/javascript">
var ErrorCode = (function(){
	
	var codeMap = {};
	
	return {
		showError:function(errorCode) {
			var func = codeMap[errorCode];
			func();
		}
		// 设置代码事件
		,setErrorCode:function(code,func) {
			codeMap[code] = func;
		}
	}
})();

// 设置错误码
ErrorCode.setErrorCode('1000',function(){
	alert('用户名不存在');
});
ErrorCode.setErrorCode('1001',function(){
	alert('验证码错误');
});


// 运行错误码
ErrorCode.showError('1000');
</script>
如果我要新增一个错误码:1002-"密码错误" 那么我只要在另一个地方添加一句:
ErrorCode.setErrorCode('1002',function(){
	alert('密码错误');
});
这句话写在另一个JS文件内,或者添加在JS文件最下方即可实现新的功能.

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧