文章列表
适配器模式又叫包装器。因为它们是在用一个新的接口包装另外一个对象。许多时候创建适配器对程序员和设计人员都有好处。
适配器可以被添加到现有代码中协调俩个不同的接口。
例如:在使用js库进行开发,开发团队由于性能,安全等原因的考虑,在不改动已有代码的前提下更换所有的库。有时公司甚至可能会为了帮助开发新手提供一套中间性适配器。创建适配器库是一个比改写所有代码更好的选择
下面就是一个简单的适配器
//将prototype的$函数改成YUI的get方法
function prototypeToYUIAdapter(){
return YHOO.util.Dom.get(arguments ...
门面模式有俩个作用:1是简化类的接口;2是消除类与使用它的客户代码之间的耦合。几乎所有js库的核心原则。这也就是封装的目的。
比如每次点击,拖动和移动某个东西,实际是跟一个门面打交道
function addEvent(el,type,fn){
if(window.addEventListener){
el.addEventListener(type,fn,false);
}else if(window.attachEvent){
el.attachEvent('on'+type,fn);
}else{
...
桥接模式:将抽象与其实现隔离开来,以便俩者独立变化。这个模式弱化它与使用它的类和对象之间的耦合,这种模式最容易付诸实施。这种模式对于javascript中常见的事件驱动编程大有裨益
桥接模式最常见和实际应用场合之一是事件监听器回调函数。
addEvent(element,'click',getBeerById);
function getBeerById(e){
var id=this.id;
asyncRequest('GET',url,function(resp){});
}
这样就做到了事件回调函数与接口之间进行了桥接
2 在现 ...
1.用ajax技术进行异步请求是现在web开发中常见的一个任务。简单的工厂非常适合这种场合,根据浏览器能力不同生成一个
xmlHttpRequest或者ActionXObject
var simpleHandler=function(){};
simpleHandle.prototype={
request:function(model,url,callback,postValue){
//相当于调用一个工厂类来获取xhr
var xhr=this.createXhrObject();
...
1.简单工厂模式
工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一
个类。
先看一个简单的java例子
//自行车接口
public interface Bicycle{
public void getName();
public void assemble();
public void wash();
}
//自行车产品A
public class BicycleA{
public void getName(){
Syst ...
var Pserson={
_age:10,
_name:'defaultName',
_setAge:function(){},
_setName:function(){},
getName:function(){}
}
单体模式应该是javascript中最基本的设计模式。
可以用来划分命名空间,减少全局变量的数目。因为单体只会被创建实例化一次,所以你不用担心自己在构造函数中声明了多少成员。每个方法和属性只会被创建一次。所以单体模式一般是用于不会重复使用的功能模块的封装。比如附件上传控件,比如xhr对象创建封装等类似的 ...
使用原型式继承,不需要定义对象的结构,只需要直接创建一个对象即可。这个对象随后可以被新对象重用
//首先定义一个clone函数
function clone(object){
function F();
F.prototype=object;
return new F;
}
//从上面的代码可以看出 该封装其实跟类式继承有点大同小异 这里相当于是获取了继承后 产生一个新对象返回而已。所以原型式继承是不需要构造结构的
var Person={
name:'defaultName',
getName:function(){
return this.name;
}
...
js继承主要分为类式继承和原型式继承。
类式继承:大概思路1 继承其构造函数,2.继承其方法,3 声明其构造结果 4 覆盖和扩充自己的方法
首先定义一个常用类Person
//定义构造函数
function Person(name){
this.name=name
}
//定义类的公用方法
Person.prototype.getName=function(){
return this.name
}
//创建Person对象调用
var boy=new Person("mali");
boy.getName();
创建一个新类Author来 ...
"If I have seen further it is by standing on the shoulders of Giants" —— Isaac Newton (1642-1727)
有人认为Maven是一个依赖管理工具,当然这种想法是错误的(确切的说Maven是一个项目管理工具,贯穿了整个项目生命周期,编译,测试,打包,发布...),但Maven给人造成这种错误的印象也是有原因的,因为Maven的依赖管理十分强大,用好了Maven,你不再需要面对一大堆jar感到头大,依赖冲突,无用依赖等问题也能够得到有效的防止和解决。本节介绍如何用好Maven的依赖管理 ...
当Maven项目很大,或者你运行诸如 mvn site 这样的命令的时候,maven运行需要很大的内存,在默认配置下,就可能遇到java的堆溢出。如:
[INFO] Building jar: /home/dl9pf/svn/mindquarry/mindquarry-jcr/mindquarry-jcr-changes/target/mindquarry-migration-with-d ...
Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言 ...
Maven能够帮我们很好的管理测试,我们可以在 src/test/java 和 src/test/resources 下面使用JUnit或者TestNG 编写单元测试和集成测试,然后在命令行运行 mvn test ,测试就会自动运行,同时产生详细的测试报告。对只有一两个人的项目来说 ...