摘要: 概述 JavaScript本身并非面向对象(不支持“class”关键字),只能通过其本身的一些特性来模拟面向对象编程。 主要分为两大类: 1,原始对象方式; 2,构造函数方式(推荐)。原始对象方式 直接使用json: var Dog = { name : ''; color : '' }; var dog1 = {}; dog1.name = "dog1"; dog1.color = "yellow"; var dog2 = {}; dog2.name = "dog2"; dog2.color = &q 阅读全文
posted @ 2013-10-29 10:44 Alex_Monkey 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 用JS(包括Jquery)有一段时间了,但是对于闭包啥的一直没仔细研究过。闭包是JS中对于初学者而言,一个较难的知识点。以下是我从网上学习到的,我把它写出来,一方面分享给大家,有啥不对的见解还望指出;另一让面也是记录自己的学习过程。作用域要理解闭包,首先是作用域问题。JS的function中可以读取全局变量,如以下代码: var n = 1; function f1(){ alert(n); } f1(); // 1但是,无法从function外部获取内部的局部变量,如以下代码: function f1(){ var n = 1; } alert(n); // error... 阅读全文
posted @ 2013-08-11 22:24 Alex_Monkey 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 概述 将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。适用场景 1)构建一个复杂对象,该复杂对象内部往往有许多部件(域)待初始化; 2)通过不同的生成器,就可生成相应的复杂对象;结构 1)Product:即产品类。该类很复杂,它包含的域待初始化; 2)Builder:抽象Builder类。它需要指定Product对象中各部件的生成方法:buildPart(); 3)ConcreteBuilder:Builder类的一个实现。它包含一个待初始化的Product对象,通过对其组件进行初始化,并提供一个成型对象的方法; 4)Director:建造者。它包含一个抽象... 阅读全文
posted @ 2013-05-18 16:59 Alex_Monkey 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 当创建对象时,直接使用构造器是最自然不过的事情,但不妨考虑一下静态工厂方法。注:区别于设计模式中的工厂方法,它只是一个静态的方法而已;设计模式中的工厂方法通常包括商品和工厂两个组件,没那么复杂。因为它可以为你带来以下构造器所不能提供的优势:1. 有名称 场景:构造器的命名都一致 当一个类需要提供多个构造器时,通常只是通过不同的入参加以区分,但其函数名还是相同的,无法提供较高的区分度。 这时,不妨考虑用静态工厂方法代替构造器,并且慎重地选择名称以便突出它们之间的区别。2. 不必在每一次创建时都提供新对象 场景:调用构造器时每次都创建新对象 这一点很显然,我们知道Singleton其实也... 阅读全文
posted @ 2013-05-05 23:36 Alex_Monkey 阅读(1017) 评论(0) 推荐(0) 编辑
摘要: Hibernate是当前最流行的ORM框架,ORM即Object/Relation Mapping, 对象关系数据库映射。ORM是一种规范:完成面向对象语言到关系数据库的映射。本文将演示一个最简单的demo,完成往数据库中添加记录的功能。准备工作:本文采用Hibernate 3.6.0版本,用到的jar包如下图:一个典型的Hibernate Demo应该包含一下三个文件: 1. PO,持久化对象。利用它可完成持久化操作。Hibearnate是低侵入式的设计,只需一个POJO(普通java对象)即可,无需继承任何父类和接口。 2. *.hbm.xml。POJO与数据库表之间的映射配置文件。 .. 阅读全文
posted @ 2013-05-05 15:18 Alex_Monkey 阅读(2237) 评论(0) 推荐(0) 编辑
摘要: 命令模式概述: 有三个对象:接收者,调用者,命令 场合:调用者需要让接收者执行其方法,将接收者和调用者解耦以下是个人的分析与理解: 调用者需要让接受者做某事,我们完全可以这样做:调用者中包含接受者的引用,并调用其方法。但是这样通过硬编码的实现方式,使得调用者与接受者之间是强耦合的。一个解决此问题的方法便是:命令模式。 建立命令模式的步骤: 1.建立一个命令Command接口,包含一个execute()方法。 2. 建立一个CommandImpl类,实现Command接口;包含一个Accepter接受者,覆写execute方法时,调用Accpter具体方法。 3. 建立... 阅读全文
posted @ 2013-04-16 22:36 Alex_Monkey 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 近日,学习了一下解释器模式(地址:http://www.cnblogs.com/cbf4life/archive/2009/12/17/1626125.html),作者用一个公式计算器的例子来阐述解释器模式,该计算器能完成加减法的计算: 1. 给定任意加减法公式,eg:a+b-c 2. 分别给定a b c的值 3. 计算公式的值本文通过改写这个例子,使这个公式计算器更加强大,增加了以下功能:A.支持括号符B. 支持乘除法等优先级不同的运算符C. 可扩展其他运算符,真正做到开闭原则1. 表达式 首先,要说的是表达式。表达式可以是一个变量,也可以是一个符号(比如加减乘除)。它们有一个相同点... 阅读全文
posted @ 2013-04-04 21:15 Alex_Monkey 阅读(958) 评论(0) 推荐(0) 编辑
摘要: vim有编辑器之神的美誉。 有一定的学习曲线,但是熟练之后真是让人爱不熟手啊。vim可以让人完全抛弃鼠标,所有操作全部通过命令实现,大大提高编码的效率。 废话不多说,下面我说一下我的实现: 1. vim3个模式: 一般模式,插入模式,以及命令模式。 一般模式:主要用于进行复制黏贴删除、定位光标等操作。 插入模式:进行编辑代码的模式。 命令模式:也称底行模式(命令会在底行显示)。主要用于打开、保存、关闭文件。 模式之间的切换如下图所示: 2. 设计 2.1 模式类簇 我们知道,不同的模式下有不同的行为。即对于相同的输入,不同的模式应当有不同的响... 阅读全文
posted @ 2013-03-08 14:45 Alex_Monkey 阅读(1187) 评论(0) 推荐(0) 编辑
摘要: 观察者模式 概述: 有两种对象:主题、观察者。 场合:主题的状态变化时,所有观察者都能够获知。 以下是个人的分析与理解: 观察者和主题存在一对多的对应关系,即一个主题可被过多个观察者关注。这里很容易就可以联想到主题应当可以管理一组观察者,并提供如下操作: 1. 注册某个观察者。 2. 删除某个观察者。 3. 状态变化时,通知所有观察者。 当主题通知观察者时,每个没观察者又应当有属于自己的“反应”,没错,使用多态即可!! 实现: Subject接口:1 package Observer;2 /*3 * Subject Interface4 */5 pub... 阅读全文
posted @ 2013-02-25 23:18 Alex_Monkey 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 策略模式 定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。(虽然能理解意思,但真心记不住= =) 策略模式其实不难,顾名思义就是更改策略(策略接口下的子类)。首先是需要一个策略接口:Strategy,可以有n个子类实现此接口;其次是拥有此接口对象(注意是接口对象,而不是任意的子类)的客户端,那么客户端可以在运行时根据需要选择策略(子类)。 这样做的好处: 1. 维护方便:若策略经常改变,则更换策略便是;若出现新策略,那么实现一个继承策略接口的子类便可。其实这都可以归结为针对接口编程带来的好处。 2. 强大的组合:想象一下,若有n个策略... 阅读全文
posted @ 2012-10-23 14:27 Alex_Monkey 阅读(195) 评论(0) 推荐(0) 编辑