什么是设计模式。
回答这个问题,往往我们得先知道我们为什么需要设计模式,正是因为有需求才会有设计模式,难道不是吗?
我们为什么需要设计模式。
如果没有按照设计模式去写,你的代码很可能是乱无肆忌写的,也就是随心所欲,想怎么写就怎么写,反正只要出效果就行,好像是没啥问题,但好像又有问题,因为你根本就不知道这段代码在将来会发生什么问题,因此这段代码是不可预测的,另外一点你的代码废话可能会多一些,等等,如果用设计模式来写,往往可以解决这些问题。
那么究竟什么是设计模式。
其实在‘我们为什么需要设计模式’这段话中已经提到了几点,如果从教学层面来说什么是设计模式的话,可以理解为设计模式就是一种经验,就是前人已经尝试过某些写法,他们知道怎么去写会好一些,怎么去写可能会出错。因此我们只需要按照他们的方式去写代码,就可以解决我们程序中的一些问题。
什么是多态。
我们知道面向对象其中有一项就是多态,但网上很少有去讲JS多态的问题,主要原因就是JS天生就是多态的。
如下:
var a = 10;
a = 'hello world';
JS可以随意更改变量类型,主要原因就是JS是动态脚本语言,决定变量类型是在运行这段代码时决定的,而不像传统语言在编译的时候就决定了。
再看下面一段代码:
function fn(name){
alert(name);
}
fn('zhuimengzi');
fn('追梦子');
根据传入的参数可以打印不同的值。
多态指的就是同一操作,作用在不同对象上可以产生不同的结果。也想象成动态的,多态多态,不就是指多种形态。
再如:
function Hello(why){
why.sayHello();
}var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};Hello(a);
Hello(b);
好像这没啥用吧?如果粗略的看好像是没啥,但细看,却是一种思想,我们来看
function Hello(why){
why.sayHello();
}var a = {sayHello:function(){alert('我是A')}};
var b = {sayHello:function(){alert('我是B')}};Hello(a);
Hello(b);
这段代码其实是有分工的,Hello这个函数它只做一件事就是让一个对象执行一个方法。并不在乎是哪个对象。多态的核心思想就是做什么,和谁去做是分开来的,再看“同一操作,作用在不同对象上可以产生不同的结果。”这句话,这里强调了同一操作,也就是操作同一个东西它可以产生多面性。也就是说Hello里面的代码必须有复用性。你不能说我传另外一个对象,你就不能用了。
鸭子类型。
鸭子类型即,我不至于你是什么,比如我们经常看电影听到的,我不在乎你长得漂不漂亮,只要是个女的就行,等等这类。再如:我不管你怎么写,你给我提供一个接口就行。对应代码:
var json = {fn:function(){}};
if(json.fn&&(typeof json.fn)==='function'){
alert('ok');
}
只要有json.fn这个方法就行,我不管你怎么写的,和我没关系。